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

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

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/qq260250932/p/4985806.html
Copyright © 2011-2022 走看看