码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2017-05-06 00:51:11      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:context   upd   int   最好   server   nuget   类型   ges   ati   

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

本访问层需要通过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的简单数据库访问层,适用于轻量级数据库业务

标签:context   upd   int   最好   server   nuget   类型   ges   ati   

原文地址:http://www.cnblogs.com/riverflow/p/6815395.html

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