一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务
2017-06-18 11:08
549 查看
这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来。
本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用。
搭配数据库,最好是Sql Server(微软支持,你懂的)
下面贴代码
先是IRepository.cs
然后是实现 Repository.cs
具体的使用:
可以写一个DbFactory方法,用来生成一个数据库连接(对象)
在业务逻辑层,我们可以
本访问层需要通过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类型的数字来查看 结果。 }
相关文章推荐
- 关于轻量级数据库SQLite一个简单的SQLiteHelper访问数据库封装类
- 关于轻量级数据库SQLite一个简单的SQLiteHelper访问数据库封装类
- 一个简单实用的“数据库访问层”!(基于C#语言)
- ADO.NET Entity Framework 一个简单数据绑定例子
- 30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例
- ASP.NET MVC+Entity Framework 4.1访问数据库
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
- ASP.NET MVC+Entity Framework 4.1访问数据库
- 一个简单的jsp访问数据库程序
- Hibernate 实体类注解 Entity方式5、@Basic(fetch=FetchType,optional=true) 可选 @Basic表示一个简单的属性到数据库表的字段的映射,对于没有
- ADO.NET Entity Framework 一个简单数据绑定例子
- Silverlight实用窍门系列:30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例【实例源码+数据库下载】
- [翻译] - <Entity Framework> - 快速入门: 用 EMD 工具在已有数据库的基础上创建一个模型
- 一个简单实用的数据库访问层(转)
- ASP.NET MVC+Entity Framework 访问数据库
- Silverlight实用窍门系列:30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例【实例源码+数据库下载】
- 精心设计的基于组件的C# Win Forms实践 一个框架数据库驱动多个业务逻辑数据库
- 精心设计的基于组件的C# Win Forms实践 一个框架数据库驱动多个业务逻辑数据库
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
- 一个简单的,适应多种数据库之间存取操作的数据库访问层