EF 5.0 帮助类 增删改查

原文地址:http://www.cnblogs.com/luomingui/p/3362813.html

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就可以做到扩展了。

你可能感兴趣的:(增删改查)