一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务

Posted 山涧清泉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务相关的知识,希望对你有一定的参考价值。

这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来。

本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用。

搭配数据库,最好是Sql Server(微软支持,你懂的)

下面贴代码

先是IRepository.cs

技术分享
  public interface IRepository:IDisposable
    {    
     //获取一个表的IQuerable接口查询 IQueryable<T> All<T>() where T : class;
     //插入一条记录 void Insert<T>(T entity) where T : class;
     //根据条件,获得一条记录 T Get<T>(Expression<Func<T, bool>> conditions) where T : class;
     //传入一个前面获得的T对象,修改记录 void Update<T>(T entity) where T : class;
     //删除一条记录 void Delete<T>(T entity) where T : class;
     //保存所有更改 int SaveChanges(); }
技术分享

然后是实现 Repository.cs

技术分享
  public class Repository:IRepository
    {
        private DbContext context;

        public Repository(DbContext dbcontext)
        {
            context = dbcontext;
        }

        public IQueryable<T> All<T>() where T : class
        {
            return context.Set<T>().AsNoTracking();
        }

        public void Insert<T>(T entity) where T : class
        {
            context.Set<T>().Add(entity);
        }

        public T Get<T>(Expression<Func<T, bool>> conditions) where T : class
        {
            return All<T>().FirstOrDefault(conditions);
        }

        public void Update<T>(T entity) where T : class
        {
            var entry = context.Entry(entity);
            if (entry.State == EntityState.Detached)
            {
                context.Set<T>().Attach(entity);
            }
            entry.State = EntityState.Modified;
        }        

        public void Delete<T>(T entity) where T : class
        {
            var entry = context.Entry(entity);
            if (entry.State == EntityState.Detached)
            {
                context.Set<T>().Attach(entity);
            }
            entry.State = EntityState.Deleted;
        }


        public int SaveChanges()
        {
            return context.SaveChanges();
        }

        public void Dispose()
        {
            context.Dispose();
        }

    }
技术分享

具体的使用:

可以写一个DbFactory方法,用来生成一个数据库连接(对象)

技术分享
  public class DbFactory
    {
       //这里可能会有数据库连接串什么的,具体情况具体应用
        public static IRepository Create()
        {
            return new Repository(new DbFactory().DbContext);
        }
    }
技术分享

在业务逻辑层,我们可以

技术分享
    using(var db = DbFactory.Create())
       {
           // 这里可以是增删改的代码,
           //  例如db.Insert<User>(user);  db.Insert<UserOther>(uo);
       // 可以任意跨表,EntityFramework 自带事务,最后SaveChanges会一并处理
int result = db.SaveChanges(); //SaveChanges()会返回一个更改数字,所以可以用一个int类型的数字来查看 结果。 }








以上是关于一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务的主要内容,如果未能解决你的问题,请参考以下文章

使用 EntityFramework.Core 从自引用表加载完整的层次结构

EntityFramework 7 更名为EntityFramework Core(预发布状态)

从零开始学 ASP.NET Core 与 EntityFramework Core 目录

ASP.NET Core3.0+EntityFrameWork Core3.0更新后的一个关于GroupBy的坑

Entityframework core where条件,执行的sql字符串及其结果

EntityFramework Core 中的映射继承