EF 5.0 帮助类
EF 5.0 帮助类
加入命名空间:
using System; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq;
接口:
public interface IEFRepository<TEntity> where TEntity : class{bool AddEntity(TEntity entity);bool UpdateEntity(TEntity entity);bool UpdateEntity(IEnumerable<TEntity> entities);bool DeleteEntity(int ID);bool DeleteEntity(TEntity entity);bool DeleteEntity(Expression<Func<TEntity, bool>> predicate);bool DeleteEntity(IEnumerable<TEntity> entities);IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda);IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null);TEntity FindByID(int ID);}
具体类:
//EF5.0的写法 public class EFRepository<TEntity> : IEFRepository<TEntity> where TEntity : class{#region 单利模式public static EFRepository<TEntity> Instance = new EFRepository<TEntity>();public EFRepository( ){Create();}#endregion/// <summary>/// 获取 当前使用的数据访问上下文对象/// </summary>public DbContext Context{get{return EFDbContextHelper.Context;}}public bool AddEntity(TEntity entity){EntityState state = Context.Entry(entity).State;if (state == EntityState.Detached){Context.Entry(entity).State = EntityState.Added;}Context.SaveChanges();return true;}public bool UpdateEntity(TEntity entity){Context.Set<TEntity>().Attach(entity);Context.Entry<TEntity>(entity).State = EntityState.Modified;return Context.SaveChanges() > 0;}public bool UpdateEntity(IEnumerable<TEntity> entities){try{Context.Configuration.AutoDetectChangesEnabled = false;foreach (TEntity entity in entities){UpdateEntity(entity);}return true;}finally{Context.Configuration.AutoDetectChangesEnabled = true;}}public bool DeleteEntity(int ID){TEntity entity = FindByID(ID);return DeleteEntity(entity);}public bool DeleteEntity(TEntity entity){Context.Set<TEntity>().Attach(entity);Context.Entry<TEntity>(entity).State = EntityState.Deleted;return Context.SaveChanges() > 0;}public bool DeleteEntity(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate){List<TEntity> entities = Set().Where(predicate).ToList();return Context.SaveChanges() > 0;}public bool DeleteEntity(IEnumerable<TEntity> entities){try{Context.Configuration.AutoDetectChangesEnabled = false;foreach (TEntity entity in entities){DeleteEntity(entity);}return true;}finally{Context.Configuration.AutoDetectChangesEnabled = true;}}public IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda){if (whereLambda != null)return Context.Set<TEntity>().Where<TEntity>(whereLambda).AsQueryable().ToList();elsereturn Context.Set<TEntity>().AsQueryable().ToList();}public IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null){int skinCount = (pageIndex - 1) * pageSize;if (whereLambda != null)return Set().Where<TEntity>(whereLambda).Skip(skinCount).Take(pageSize).ToList();elsereturn Set().Skip(skinCount).Take(pageSize).ToList();}public DbSet<TEntity> Set( ){return Context.Set<TEntity>();}public TEntity FindByID(int ID){return Set().Find(ID);}private TEntity Create( ){return Context.Set<TEntity>().Create();}}
使用:
准备实体类
/// <summary> /// 实体类楼层管理 。(属性说明自动提取数据库字段的描述信息) /// </summary> [Serializable]public class Floor { public int ID { get; set; } [Category("楼层名称")]public string f_Name { get; set; } [Category("备注")]public string f_Remark { get; set; } }
使用EF帮助类调用
/// <summary> /// 数据上下文 Db3983Context /// </summary> public class Db3983Context : EFDbContext { /// <summary> /// 构造函数 /// </summary> public Db3983Context() : base("3983") { } /// <summary> /// 楼层管理 /// </summary> public DbSet<Floor> Floor { get; set; } }
/// <summary>/// 应用程序的主入口点。/// </summary> [STAThread]static void Main( ){EFDbContextHelper.Context = new Db3983Context();Floor floor = new Floor();floor.f_Name = "罗敏贵";floor.f_Remark = "我这个人看上去很靠谱,长得也很高有一米八五,也很帅气,千万不要迷恋哥,哥只是传说。";EFRepository<Floor>.Instance.AddEntity(floor);}
扩展:
其他ORM只要现实上面的接口就可以了,然后在配置文件制定使用哪个ORM就可以做到扩展了。
http://www.cnblogs.com/lori/archive/2012/10/19/2731801.html
EF 5.0 帮助类相关推荐
- EF 5.0 帮助类 增删改查
原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...
- EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录
前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...
- Boost:测试使用大小为0的类array <>特化
Boost:测试使用大小为0的类array <>特化 实现功能 C++实现代码 实现功能 测试使用大小为0的类array <>特化 C++实现代码 #include <s ...
- 【编译系统】什么是PL/0和类Pcode虚拟机
[编译系统]什么是PL/0和类Pcode虚拟机 什么是PL/0 什么是类P-Code虚拟机 什么是PL/0 PL/0是个虚拟的编译系统,也是一些虚拟的编译语言,计算机并看不懂,那么怎么运行呢,找一个看 ...
- 【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
主要参考微软官方文档 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db Microsoft .NE ...
- 一步步学习EF Core(3.EF Core2.0路线图)
前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西.不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Core ...
- Ext2.0布局类初探
Ext2.0正式版虽然还没出来,但是官网上的例程还是令人兴奋不已.内存泄漏的问题应该是解决了,布局类更新了,增加了新的东西,grid的功能更加强大,tabs也增加了循环按钮,还增加了类似delphi ...
- .net 2.0 BackgroundWorker类详细用法
在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成"假死"的情况,或者报"线程间操作无 ...
- java基础.0——Object类
从这篇文章起就正式开始java学习之旅了.java中,万物皆对象,所以第一篇先学习java的Object类,循序渐进. 一.getClass() 1 public final native Class ...
最新文章
- 用Leangoo敏捷开发工具如何管理用户故事?
- 设计模式之享元模式学习笔记
- GET 和 POST 的区别(重要,面试常问)
- hive 0.11 mysql_Hive的升级(0.8.0到0.11.0)
- cas 注销不关闭浏览器异常_上海公司经营异常注销麻烦吗
- altium 去掉部分铺铜_干货|HFSS器件导入Altium进行PCB制作教程!!!
- 一文了解Linux 网络 I/O 模型
- java 数组的get set_java.lang.reflect.Array.setBoolean()方法
- 二进制和八进制表示法
- 设计师社区网站-交流、学习、展示
- [hdu1242]优先队列
- python如何与其他软件交互_如何与Python中的另一个程序交互?
- 【NER】命名实体识别:详解BiLSTM_CRF_Pytorch_Tutorial代码
- matlab r2014a 序列号,Matlab R2014a 免费版
- PSD缩略图的设置方法
- KMS和MAK的区别
- 中职学校计算机教学参考文献,中职计算机教学论文
- Airflow PythonOperator、BashOperator以及Xcom使用
- Python京东抢购
- 涛思数据创始人陶建辉荣获“2020中国开源杰出贡献人物”奖