前言

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

构建过程

一,数据访问

首先在 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. Java 最全异常讲解

    1. 导引问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是 ...

  2. filter修改post参数

    前景:公司项目web渗透测试中提出管理登录时,传输密码不能为明文,需要加密传输,但是迫于系统架构,后端代码不能修改,只能在filter中解密参数. 1.前端加密处理: <script type= ...

  3. 迁移桌面程序到MS Store(10)——在Windows S Mode运行

    首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...

  4. 怎样用QT在windows环境通过编程卸载installShield打包的程序

    通常情况下,如果是一个完备的软件,我们可以通过启动软件的uninstaller.exe之类的程序来完成卸载.但是使用installShield打包的程序,本身可能并不含有这类卸载程序.此时,我们可以通 ...

  5. 从Linux服务器下载上传文件

    首先要确定好哪两种的连接:Linux常用的有centors和unbantu两种版本,PC端Mac和Windows 如果在两个Linux之间传输,或Linux和Mac之间传输可以使用scp命令,类似于s ...

  6. codeforces 456 D. A Lot of Games(字典数+博弈+思维+树形dp)

    题目链接:http://codeforces.com/contest/456/problem/D 题意:给n个字符串.进行k次游戏.每局开始,字符串为空串,然后两人轮流在末尾追加字符,保证新的字符串为 ...

  7. hdu Sumsets

    Farmer John commanded his cows to search for different sets of numbers that sum to a given number. T ...

  8. 大白话通俗易懂的讲解javascript原型与原型链(__proto__、prototype、constructor的区别)

    javascript原型和原型链是js中的重点也是难点,理论上来说应该是属于面向对象编程的基础知识,那么我们今天为什么要来讲这个呢?(因为我也忘了,最近看资料才揭开面纱……  哈哈哈) 好了,直接进入 ...

  9. 为什么spark中只有ALS

    WRMF is like the classic rock of implicit matrix factorization. It may not be the trendiest, but it ...

  10. Spring boot出现Cannot determine embedded database driver class for database type NONE

    在spring boot项目中,我们在pom.xml文件中添加了mysql和mybatis的依赖,我们常常遇到下面这样的问题: Description: Cannot determine embedd ...