前言

 

上一篇文章介绍了整个项目的结构,接下来向大家介绍一下 我的 仓储及业务层具体的实现思路,如果有更好的实现方式,希望大家及时指出!!!

 

构建过程

 

一,数据访问

首先在 DataProvider 中添加NuGet对应的 EFCore 的依赖

 

为了节省篇幅接下来的实体在数据库中已有对应表

这是一个简单的实体(Table指定了映射数据库中对应哪张表)

 

 

接下来添加项目应用Entities, 新建 数据库上下文对象并继承DbContext(有时候可能由于数据库上下文中单个类实体对象属性偏多所以采取分部类的形式,将一个数据库上下文按照对象关系类型分为多个具体类(如图 Sys/SysModal.cs)

 

 

 

 

二,仓储

访问单表数据我们使用仓储的形式,首先抽象出仓储的基本功能(增删改查),其他仓储在其基础上扩展

新建IBaseRepository接口

 

接下来实现它

这里采用了 依赖注入的方式,将数据库上下文对象及日志对象注入了进来以方便我们进行数据访问及日志收集

这里的日志对象的实现是引用了Common层的NLog日志组件

 

 

 

 

三,工作单元

访问多表数据的形式我们使用工作单元的形式,因为我们ORM使用的时EF,EF的工作模式也是仓储(DbSet)加工作单元(Db)的模式,所以我们只需要简单封装一下即可

我这里只定义了一个基本的方法Commit,其他方法按需增加

IUnitOfWork

 

 

实现工作单元

这里直接继承自AppDbContext和一个前面定义了的IUnitOfWork接口

这里的Commit我直接调用了EF的SaveChanges(EF自带的保存状态更改)

 

 

到这里我们基本的仓储就定义完成了

 

四,业务层

业务层其实没多少说明的的,具体的方法由业务决定,这里说明下涉及到仓储使用的部分

这里一样定义了一个抽象和实现(BaseService)这里的泛型约束了仓储是由我们定义的IBaseRepository,

然后将仓储由构造函数注入进来,这里我提供了两个构造函数一个单个仓储,一个含有工作单元,具体构造由子类决定

 

 

 

UserService 

 

 

五,运行

建立Webapi应用程序,我这里选择的是Auth项目

打开Startup 并添加数据库上下文

 

添加NLog(注意:这个AddNLog方法只有添加了NLog提供的扩展才会有)

 

 

 

 

 

 

因为我们使用的是Autofac容器提供的依赖注入,所以我们将ConfigureServices方法的返回类型改为IServiceProvider

 

 

我们这里采用的是模块注入

我们诸如一个默认模块DefaultModule(这个根据需要自行调整)

 

 

 

DefaultModule

 

 

这样的话我们的准备就做好了,接下来看结果!

新建Home控制器并注入服务

 

 

 

运行查看结果

 

 

 

到这里我们就大功告成拉!!!

 

版权声明:本文为ablewang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ablewang/p/11601967.html