一个基于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的定义 ...
随机推荐
- struts标签与jstl标签互换
近期在做struts切换spring mvc时发现代码中使用了大量的struts标签,对常用的struts标签做了总结,首先需要引入 <%@ taglib prefix="c" ...
- ptyhon 编程基础之函数篇(二)-----返回函数,自定义排序函数,闭包,匿名函数
一.自定义排序函数 在Python中可以使用内置函数sorted(list)进行排序: 结果如下图所示: 但sorted也是一个高阶函数,可以接受两个参数来实现自定义排序函数,第一个参数为要排序的集合 ...
- 【JVM命令系列】javap
命令基本概述 javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作.可以在命令行窗口先用javap -help看下j ...
- Mybatis Dynamic Query 2.0.2
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- Python自学笔记-sorted()函数(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 排序算法 排序 ...
- ubuntu的应用程序哪里找
一般来说11.04以前的桌面是gnome,点左上角的那个小圆圈,会出来一个下拉菜单,里面就有应用程序. 11.10以后的桌面换成unity 在dash中寻找应用程序很不方便,知道名字的还好,不知道名字 ...
- IsKeyboardFocused -- 键盘焦点
<Trigger Property="IsKeyboardFocused" Value="true"> <!--<Setter Prop ...
- 结束《Java编程思想》(Thinking in Java)自学的读后感(2017.10.15)
首先划重点:这是一本Java的入门书. 自学前需要的条件:已经具备基本的计算机基础. 1)已经对一种编程语言比较熟悉: 2)有过四年计算机专业学习,或者三年以上的软件开发经验, 自学的方法: 1)完全 ...
- 【机器学习实战】第5章 Logistic回归
第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...
- Java集合框架,未完
一.集合类 集合的由来: 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就需要将对象进行存储,集合就是存储对象最常用的一种方式. 集合特点:1,用于存储对象的容器.(容器本身就是 ...