博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC,EF 小小封装
阅读量:6863 次
发布时间:2019-06-26

本文共 4641 字,大约阅读时间需要 15 分钟。

1.项目中经常要用到 EF,有时候大多数的增删改查都是重复性的东西,本次封装就是为了快速开发,期间没有考虑到架构上的各种思想,就感觉到欠缺点什么东西所以这次将这些拉出来,有存在问题的话还请各位多多指导。

2.封装后从压力和并发上也没有去测试,有兴趣的小伙伴还望给看下。好了不废话了直接上了。

 a.先看下大概结构如下   按照顺序介绍  a.1: 实体就是一般大家手动写的实体  
a.2:  DALContext.cs 代码如下:

namespace Test.Web.Site.DAL{     public class DALContext
: DbContext where T : class { public DALContext(string con) : base(con){} public DALContext(){} public DbSet
TV { get; set; } }}

a.3  BaseDAL.cs  主要的增删改方法

namespace Test.Web.Site.DAL{     public class BaseDAL
where TEntity : class,new() { private static readonly object s_lock = new object(); private static string constr = "xxxConn";//默认一个字符串 public BaseDAL(string con = "") { if (con != constr && con.Length > 0) { lock (s_lock) { constr = con; } } } #region Modify and Delete public virtual bool Insert(TEntity entity) { using (var db = new DALContext
(constr)) { db.Set
().Add(entity); return db.SaveChanges() > 0; } } public virtual bool Delete(object col) { using (var db = new DALContext
(constr)) { TEntity entityToDelete = db.Set
().Find(col); if (entityToDelete != null) { return Delete(entityToDelete); } else { return false; } } } public virtual bool Delete(Expression
> predicate) { TEntity entityToDelete = Get(predicate); if (entityToDelete != null) { return Delete(entityToDelete); } else { return false; } } public virtual IEnumerable
InsertAll(List
list) { using (var db = new DALContext
(constr)) { var dbSet = db.Set
(); List
tList = new List
(); foreach (var item in list) { try { db.Set
().Add(item); } catch (Exception) { tList.Add(item); throw; } } db.SaveChanges(); return tList; } } public virtual IEnumerable
UpdateAll(List
list) { using (var db = new DALContext
(constr)) { var dbSet = db.Set
(); List
tList = new List
(); foreach (var item in list) { try { var entity = dbSet.Attach(item); db.Entry(item).State = System.Data.EntityState.Modified; } catch (Exception) { tList.Add(item); throw; } } db.SaveChanges(); return tList; } } public virtual bool Update(TEntity entityToUpdate) { using (var db = new DALContext
(constr)) { var dbSet = db.Set
(); var entity = dbSet.Attach(entityToUpdate); db.Entry(entityToUpdate).State = System.Data.EntityState.Modified; return db.SaveChanges() > 0; } } #endregion }}

a.4 DatabaseExtensions.cs 一个EF 扩展类 用于 连接其他数据库比如 mysql(参考的网络资源),执行sql语句查询视图有需要可在下方评论,我会及时回复

a.5 :  Test.Web.Site.BLL  对Control 开放的一系列方法 ,这里仅列举了部分代码出来,如有需要可在下方评论我及时回复你。

namespace Test.Web.Site.BLL{    public class DataBLL
where T : class,new() {
// 连接字符串 public DataBLL(string constr = "") { SingletonBase
>.Initialize(new BaseDAL
(constr)); }public T Get(Expression
> filter, string includeProperties = "") { return SingletonBase
>.Instance.Get(filter, includeProperties); } // 插入一个实体 public bool AddEntity(T t_entity) { return SingletonBase
>.Instance.Insert(t_entity); } // 跟新实体 public bool Update(T t_enttiy) { return SingletonBase
>.Instance.Update(t_enttiy); } // 依据sql查询 list public IEnumerable
GetListBySql(string query,bool otherdb = true) { return SingletonBase
>.Instance.GetBySql(query, otherdb); } // 删除满足条件的所有数据 public IEnumerable
DeleteAll(Expression
> predicate) { return SingletonBase
>.Instance.DeleteAll(predicate); } // 批量更新 list public IEnumerable
UpdateAll(List
list) { return SingletonBase
>.Instance.UpdateAll(list); } // 批量添加 public IEnumerable
InsertAll(List
list) { return SingletonBase
>.Instance.InsertAll(list); } }}

3.Control 调用只需要类似:

Account currAccount = new DataBLL
(ConfigHelper.Constr_read).Get(p => p.UserId == 1111);

  new DataBLL<Account>.GetPage(out totalCount, query.Expression, pageIndex, pageSize, k => k.OrderByDescending(_ => _.CreateTime)).ToList();

 

总结:到此就结束了所有代码可复制过去加入EF引用就开始用了。有发现问题的小伙伴敬请抛砖。小弟不胜感激。

 

转载于:https://www.cnblogs.com/LiMin/p/5083678.html

你可能感兴趣的文章
android单元测试框架中的类
查看>>
C#遍历动态对象属性
查看>>
Mathematica中的尾递归优化
查看>>
Nginx+fastcgi+c语言+jQuery等技术实现设备端web登录
查看>>
QT学习资料
查看>>
Service Mesh:什么是Sidecar模式
查看>>
关于如何将安全意识带入企业的思考
查看>>
反射 注解的解析
查看>>
Docker | 搭建docker本地镜像仓库
查看>>
(转) Python 实现简单的Web服务器
查看>>
关于SVM的那点破事
查看>>
写给java web一年左右工作经验的人
查看>>
Java八种基本数据类型的比较及其相互转化
查看>>
【Java编程规范】 代码书写规范...待续中
查看>>
Qml数据类型
查看>>
float浮点数的二进制存储方式及转换
查看>>
二手X61续
查看>>
如何在 CentOS 7 上禁用 SELinux
查看>>
Android有用代码片断(五)
查看>>
Git 版本库理解
查看>>