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

作者:罗敏贵 邮箱:minguiluo@gmail.com QQ群:34178394 建群 主要是寻找志同道合的人士一起学习和讨论自己的所学所思 出处:http://luomingui.cnblogs.com/ 说明:专注于微软平台项目架构、熟悉设计模式、架构设计、敏捷个人和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。 知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

转载于:https://www.cnblogs.com/qq260250932/p/4985806.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值