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 中国大陆许可协议进行许可。

posted @ 2015-11-22 14:29  qq260250932  阅读(379)  评论(0编辑  收藏  举报