MVC,EF 小小封装
1.项目中经常要用到 EF,有时候大多数的增删改查都是重复性的东西,本次封装就是为了快速开发,期间没有考虑到架构上的各种思想,就感觉到欠缺点什么东西所以这次将这些拉出来,有存在问题的话还请各位多多指导。
2.封装后从压力和并发上也没有去测试,有兴趣的小伙伴还望给看下。好了不废话了直接上了。
a.先看下大概结构如下
按照顺序介绍 a.1: 实体就是一般大家手动写的实体
a.2: DALContext.cs 代码如下:
namespace Test.Web.Site.DAL
{
public class DALContext<T> : DbContext
where T : class
{
public DALContext(string con)
: base(con){} public DALContext(){} public DbSet<T> TV { get; set; }
}
}
a.3 BaseDAL.cs 主要的增删改方法
namespace Test.Web.Site.DAL
{ public class BaseDAL<TEntity>
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 > )
{
lock (s_lock)
{
constr = con;
}
}
}
#region Modify and Delete public virtual bool Insert(TEntity entity)
{
using (var db = new DALContext<TEntity>(constr))
{
db.Set<TEntity>().Add(entity);
return db.SaveChanges() > ;
}
}
public virtual bool Delete(object col)
{
using (var db = new DALContext<TEntity>(constr))
{
TEntity entityToDelete = db.Set<TEntity>().Find(col);
if (entityToDelete != null)
{
return Delete(entityToDelete);
}
else
{
return false;
}
} } public virtual bool Delete(Expression<Func<TEntity, bool>> predicate)
{
TEntity entityToDelete = Get(predicate);
if (entityToDelete != null)
{
return Delete(entityToDelete);
}
else
{
return false;
}
}
public virtual IEnumerable<TEntity> InsertAll(List<TEntity> list)
{
using (var db = new DALContext<TEntity>(constr))
{
var dbSet = db.Set<TEntity>();
List<TEntity> tList = new List<TEntity>();
foreach (var item in list)
{
try
{
db.Set<TEntity>().Add(item); }
catch (Exception)
{
tList.Add(item);
throw;
}
}
db.SaveChanges();
return tList;
}
}
public virtual IEnumerable<TEntity> UpdateAll(List<TEntity> list)
{
using (var db = new DALContext<TEntity>(constr))
{
var dbSet = db.Set<TEntity>();
List<TEntity> tList = new List<TEntity>();
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<TEntity>(constr))
{
var dbSet = db.Set<TEntity>();
var entity = dbSet.Attach(entityToUpdate);
db.Entry(entityToUpdate).State = System.Data.EntityState.Modified;
return db.SaveChanges() > ;
}
}
#endregion
}
}
a.4 DatabaseExtensions.cs 一个EF 扩展类 用于 连接其他数据库比如 mysql(参考的网络资源),执行sql语句查询视图有需要可在下方评论,我会及时回复
a.5 : Test.Web.Site.BLL 对Control 开放的一系列方法 ,这里仅列举了部分代码出来,如有需要可在下方评论我及时回复你。
namespace Test.Web.Site.BLL
{
public class DataBLL<T>
where T : class,new()
{
// 连接字符串
public DataBLL(string constr = "")
{
SingletonBase<BaseDAL<T>>.Initialize(new BaseDAL<T>(constr));
}public T Get(Expression<Func<T, bool>> filter, string includeProperties = "")
{
return SingletonBase<BaseDAL<T>>.Instance.Get(filter, includeProperties);
} // 插入一个实体
public bool AddEntity(T t_entity)
{
return SingletonBase<BaseDAL<T>>.Instance.Insert(t_entity);
}
// 跟新实体
public bool Update(T t_enttiy)
{
return SingletonBase<BaseDAL<T>>.Instance.Update(t_enttiy);
}
// 依据sql查询 list
public IEnumerable<object> GetListBySql(string query,bool otherdb = true)
{
return SingletonBase<BaseDAL<T>>.Instance.GetBySql(query, otherdb);
}
// 删除满足条件的所有数据
public IEnumerable<T> DeleteAll(Expression<Func<T, bool>> predicate)
{
return SingletonBase<BaseDAL<T>>.Instance.DeleteAll(predicate);
}
// 批量更新 list
public IEnumerable<T> UpdateAll(List<T> list)
{
return SingletonBase<BaseDAL<T>>.Instance.UpdateAll(list);
}
// 批量添加
public IEnumerable<T> InsertAll(List<T> list)
{
return SingletonBase<BaseDAL<T>>.Instance.InsertAll(list);
}
}
}
3.Control 调用只需要类似:
Account currAccount = new DataBLL<Account>(ConfigHelper.Constr_read).Get(p => p.UserId == 1111);
new DataBLL<Account>.GetPage(out totalCount, query.Expression, pageIndex, pageSize, k => k.OrderByDescending(_ => _.CreateTime)).ToList();
总结:到此就结束了所有代码可复制过去加入EF引用就开始用了。有发现问题的小伙伴敬请抛砖。小弟不胜感激。
MVC,EF 小小封装的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- MVC+EF+Spring.Net代码生成器
最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...
- ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK
看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...
- 多层架构+MVC+EF+AUTOFAC+AUTOMAPPER
最近使用ligerui搭建了一个简单的教务管理demo,将重要的地方记录,也希望能帮到有这方面需要园友. 一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证 ...
随机推荐
- i春秋----Misc
好久没有写 博客今天更新多了一些 解题思路:题目做多了,自然能够想到是凯撒解密: 查看得到答案; flag{4c850c5b3b2756e67a91bad8e046dda} 2: 解题思路:是我想太多 ...
- 【填坑纪事】一次用System.nanoTime()填坑System.currentTimeMills()的实例记录
JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在 ...
- 《前端之路》之 JavaScript 高级技巧、高阶函数(一)
目录 一.高级函数 1-1 安全的类型检测 1-2 作用域安全的构造函数 1-3 惰性载入函数 1-4 函数绑定 1-5 函数柯里化 1-6 反函数柯里化 一.高级函数 1-1 安全的类型检测 想到类 ...
- es6学习笔记-async函数
1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...
- ElasticSearch入门 附.Net Core例子
1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elas ...
- MTCNN算法与代码理解—人脸检测和人脸对齐联合学习
目录 写在前面 算法Pipeline详解 如何训练 损失函数 训练数据准备 多任务学习与在线困难样本挖掘 预测过程 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 主 ...
- Unity协程基础用法
//通过StartCoroutine()开始一个协程//通过StopCoroutine();关闭一个协程//通过StopAllCoroutines()方法来实现关闭所有协程void Start(){D ...
- 高淇java300集异常机制作业
1.以下关于异常的代码的执行结果是(C ).(选择一项) 1 2 3 4 5 6 7 8 9 10 11 12 public class Test { public static void m ...
- SQL过滤字符后手工注入漏洞测试(第1题)
https://www.mozhe.cn/bug/detail/a1diUUZsa3ByMkgrZnpjcWZOYVEyUT09bW96aGUmozhe 分析题目,属于时间盲注,这种情况,通常使用sq ...
- Odoo免费开源ERP销售收款的财务对账解决方案
概述 前面文章介绍了佛山王朝家具的案例背景.佛山王朝家具公司在全国有30多家门店,三个生产工厂.王朝家具有六大痛点问题: 一.订单迫切需要实现电子化管理及在线签名 二.总部分单工作量大,供应链效率低 ...