您的位置:首页 > 数据库

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

2017-06-18 11:08 549 查看
这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来。

本访问层需要通过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类型的数字来查看 结果。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐