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(); else return 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(); else return 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2010-10-11 常见模块设计--OA权限管理设计