码迷,mamicode.com
首页 > 其他好文 > 详细

EF 5.0 帮助类

时间:2015-11-22 16:03:44      阅读:141      评论:0      收藏: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

EF 5.0 帮助类

标签:

原文地址:http://www.cnblogs.com/qq260250932/p/4985806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!