前言

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

构建过程

一,数据访问

首先在 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控制器并注入服务

运行查看结果

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

一步步构建.NET Core Web应用程序---仓储层,业务层的实现的更多相关文章

  1. 一步步构建.NET Core Web应用程序---基本项目结构

    前言 随着.NET Core日益成熟, 我作为C#&.NET体系中的一份子也加入了.NET Core 这一体系中,随着不断学习, 接触到的各种框架日益庞杂,接下来我会由一个新手的角度把整个基于 ...

  2. 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等

    设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...

  3. Building Modern Web Apps-构建现代的 Web 应用程序

    Building Modern Web Apps-构建现代的 Web 应用程序 视频长度:1 小时左右 视频作者:Scott Hunter 和 Scott Hanselman 视频背景:Visual ...

  4. Asp.Net Core Web应用程序—探索

    前言 作为一个Windows系统下的开发者,我对于Core的使用机会几乎为0,但是考虑到微软的战略规划,我觉得,Core还是有先了解起来的必要. 因为,目前微软已经搞出了两个框架了,一个是Net标准( ...

  5. 使用docker部署Asp.net core web应用程序

    拉取aspnetcore最新docker镜像 aspnetcore的docker镜像在docker官网是有的,是由微软提供的.它的依赖镜像是microsoft/dotnet.通过访问网址:https: ...

  6. ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射

    本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...

  7. ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

    在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...

  8. ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

    在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...

  9. ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)

    在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...

随机推荐

  1. HDFS介绍~超详细

    HDFS(Hadoop Distributed File System)   (1) HDFS--Hadoop分布式文件存储系统   源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS ...

  2. PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  3. Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

    Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III) 同类题目: Leetcode之回溯法专题-39. 组合总数(Combination Sum) Lee ...

  4. git@github.com: Permission denied (publickey)

    1.  检查SSH key是否已经存在,如存在走第3步 :      ls ~/.ssh/ 2.  如果第1步中的SSH key不存在,生成一个新的SSH key:      ssh-keygen - ...

  5. hdu 5037 Frog(贪心)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5037 题解:为了让放的石头有意义肯定是没l+1的距离放2个也就是说假设现在位置为pos那么 ...

  6. 主席树区间第K大

    主席树的实质其实还是一颗线段树, 然后每一次修改都通过上一次的线段树,来添加新边,使得每次改变就改变logn个节点,很多节点重复利用,达到节省空间的目的. 1.不带修改的区间第K大. HDU-2665 ...

  7. hdu 5945 Fxx and game(dp+单调队列! bc#89)

    Young theoretical computer scientist Fxx designed a game for his students. In each game, you will ge ...

  8. CF992B Nastya Studies Informatics 数学(因子) 暴力求解 第三道

    Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input st ...

  9. Heron and His Triangle 2017 沈阳区域赛

    A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...

  10. JAVA - 一个for循环实现99乘法表

    public class Test03 {public static void main(String[] args) { int lie = 1; for (int hang = 1; hang&l ...