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

时间: 2025-01-01 02:16:21

EF 5.0 帮助类的相关文章

EF 5.0 修改T4模板(1)

Ps 修改EF5.0的tt文件(添加命名空间和特性and备注),之所以修改是因为,使用Json.net序列化但是又不能序列化导航属性,因为这样会使程序运行时引发一个循环引用的BUG,所以需要在tt文件中遍历的时候添加命名空间和给导航属性添加特性 一 EF 5.0 tt文件修改 1添加类备注(添加命名空间) : WriteHeader(codeStringGenerator, fileManager); string summary=string.Empty; foreach (var entit

Cocos2d-x 3.0标签类Label

Cocos2d-x 3.0后推出了新的标签类Label,这种标签通过使用FreeType[1]来使它在不同的平台上有相同的视觉效果.由于使用更快的缓存代理,它的渲染也将更加快速.Label提供了描边和阴影等特性. Label类的类图如下图所示: 创建Label类静态create函数常用的有如下几个: [html] view plaincopy static Label* createWithSystemFont(conststd::string &text,             //是要显示

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

.NET EF Core2.0 (DBFirst)使用与配置

本文环境:vs2017 win10 .NET CORE 2.14 其次,如果你是Windows7系统 那么需要升级你的Windows PowerShell到3.0+的版本 然后你需要安装相关的工具包,从NuGet下载即可如下图: 为了方便你们复制..我列一下: Microsoft.EntityFrameworkCore EF框架核心包 Microsoft.EntityFrameworkCore.SqlServer sql数据库需要,类似的还有mysql.oracle. Microsoft.Ent

EF 5.0 和 EF4.0 语法区别

// 实现对数据库的添加功能,添加实现EF框架的引用 40 41 public T AddEntity(T entity) 42 43 { 44 45 //EF4.0的写法 添加实体 46 47 //db.CreateObjectSet<T>().AddObject(entity); 48 49 //EF5.0的写法 50 51 db.Entry<T>(entity).State = EntityState.Added; 52 53 54 55 //下面的写法统一 56 57 db

EF 6.0使用小计

---恢复内容开始--- 最近尝试了下EF Extended,但是居然需要EF6.0以上,没办法,只能安装了,打开解决方案,选择库程序包管理下的程序包管理控制台(或者直接右击你需要使用扩展的解决方案选管理NuGet程序包),也不废话了,直接装上. 使用简单的三层结果,在DAL层装上了extended扩展,点开引用一看,好家伙,引入了三个dll,一个是EntityFramework,一个EntityFramework.Extended,一个是EntityFramework.SqlServer,没弄

关于ef core 将实体类生成到类库 , 将appsettings.json生成到debug目录下

将ef  core 实体类生成到 standard 类库里  如图debug下  找不到appsettings.json 配置文件 在csproj中加入 <ItemGroup> <Content Update="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup> appset

EF CodeFirst配置领域类

当我们不想使用EF的默认约定时,可以手动配置领域类,但还是推荐少配置,Simple is best! 两种配置方式: 1.Data Annotation Attributes[数据注解特性]  数据注解是一种基于配置的简单特性,你可以应用于你的领域类以及领域类的属性上.数据注解特性,不仅适用于EF.还适用于ASP.NET Web Form以及ASP.NET MVC,数据注解特性包含在System.ComponentModel.DataAnnotations.命名空间下. 2.Fluent API

EF Core1.0 CodeFirst为Modell设置默认值!

当我们使用CodeFirst时,有时候需要设置默认值! 如下 public int Delete { get; set; } = 0; public string AdminName {get; set;} = "admin"; public bool CacheDbResults { get; set; } = true;