zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    《转》MFC六大关键技术之(五)(六)——消息映射与命令传递
    《转》MFC六大关键技术之(四)——永久保存(串行化)
    《转》MFC六大关键技术之(三)——动态创建
    《转》MFC六大关键技术之(二)——运行时类信息(RTTI)
    《转》MFC六大关键技术之(一)—— 初始化过程
    C++ 语言的 15 个晦涩特性
    QT的项目管理文件pro的编写
    使用C++编写的一个Find(查找)对话框例子
    如何让Fedora能够打开RAR文件
    Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
  • 原文地址:https://www.cnblogs.com/luomingui/p/3362813.html
Copyright © 2011-2022 走看看