一个基于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的简单数据库访问层,适用于轻量级数据库业务的更多相关文章
- Java 数据库访问层
最近项目中需要对mysql进行操作,数据库的知识早在本科毕业那会就忘光了,这几年开发都没接触到数据库的操作. 借这个机会重新学习,数据库访问层是对数据库操作的一个封装,屏蔽底层的数据操作细节,通过使用 ...
- 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx
LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...
- 基于 .NET Core 的简单文件服务器
Netnr.FileServer 基于 .NET Core 的简单文件服务器,数据库为SQLite 源码 https://github.com/netnr/blog https://gitee.com ...
- Swift:一个基于.NET Core的分布式批处理框架
Swift是什么 从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合. Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发到多台服务器并 ...
- 如何创建一个基于 .NET Core 3 的 WPF 项目
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
- 使用Repository模式构建数据库访问层
使用Repository模式构建数据库访问层 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[二]——使用Repository模式构建数据库访问层 系列导航地址http:// ...
- MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一
抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- (Entity framework 应用篇)把权限判断封装在数据库访问层
这里,我只是以一个例子,说一下简单权限控制,通过这个例子,大家可以设计庞大的权限管理层,把权限控制封装到数据库访问层,这样程序员就不用再写权限判断的代码了 首先,先看看我数据库DBContext的定义 ...
随机推荐
- JS中关于数组的内容
前 言 LIUWE 在网站制作过程中,数组可以说是起着举足轻重的地位.今天就给大家介绍一下数组的一些相关内容.例如:如何声明一个数组和在网站制作过程中我们常用的一些数组的方法.介绍的不好还请多多 ...
- 配置exVim开发环境
exVim主页 http://exvim.github.io/ 使用该配置原因: 简单,组织各种优秀插件,安装包很小,各种操作很流畅 实用,对于项目来说,只需要多出一个xx.exvim文件,所有符号等 ...
- Apache服务器处理404错误页面技巧
1.打开Apache目录,查找httpd.conf文件 2.打开httpd.conf文件,找到<Directory " "></Directory>这 ...
- jsonp其实很简单【ajax跨域请求】
js便签笔记(13)——jsonp其实很简单[ajax跨域请求] 前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资 ...
- Android开发之基于监听的事件处理
在Android 应用开发过程中,常用监听事件如下:(1) ListView事件监听setOn ItemSelectedListener:鼠标滚动时触发setOnItemClickListener: ...
- 初始Socket编程(python)
通信双方要有一个服务端和一个客户端,所以要分开去写代码. 所以我创建了两个py程序,第一个是服务端:iServer.py 和客户端 iClient.py 服务端: #coding:utf-8from ...
- Crayon 线段树或者树状数组
Crayon Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus ...
- Two Sum IV - Input is a BST
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...
- CN_Week1_Receptive_Field
0. The introduction: 1. An example: Models of "Receptive Fields". 2. An intuitive method o ...
- C# 中函数内定义函数的委托方法
//定义委托方法Action(无返回值)Func(有返回值) //无返回值委托 Action<string> SetKeyAndValue = delegate(string key) { ...