首页 > 其他分享 >.Net 6搭建仓储模式框架学习(一)

.Net 6搭建仓储模式框架学习(一)

时间:2023-09-21 10:56:15浏览次数:40  
标签:逻辑 数据库 EF 模式 仓储 Net 搭建 First

仓储模式

.NET仓储模式是一种软件设计模式,用于将应用程序的数据访问逻辑与业务逻辑分离。它通过将数据访问操作封装在一个单独的仓储类中,使得业务逻辑层可以独立于具体的数据存储技术。

在.NET仓储模式中,仓储类负责处理与数据存储相关的操作,例如数据的增删改查、数据的持久化和查询等。它提供了一组公共的接口和方法,供业务逻辑层调用。业务逻辑层通过调用仓储类的方法来进行数据的读写操作,而不需要关心具体的数据存储细节。

.NET仓储模式的优点包括:

  1. 解耦性:仓储模式将数据访问逻辑与业务逻辑分离,使得它们可以独立开发、测试和维护,降低了代码的耦合度。

  2. 可测试性:由于仓储模式将数据访问逻辑封装在一个单独的类中,业务逻辑层可以通过模拟仓储类的行为进行单元测试,提高了代码的可测试性。

  3. 可扩展性:通过使用接口和抽象类,可以轻松地扩展和替换具体的数据存储技术,例如从关系型数据库切换到NoSQL数据库。

  4. 可维护性:由于仓储模式将数据访问逻辑集中在一个类中,使得对于数据访问操作的修改和维护更加方便。

总而言之,.NET仓储模式是一种将数据访问逻辑与业务逻辑分离的设计模式,通过提供一个统一的接口和方法,使得业务逻辑层可以独立于具体的数据存储技术。这种模式具有解耦性、可测试性、可扩展性和可维护性等优点。

项目架构(这里只是一个最基本的框架)

ORM

ORM选的是经典的EF Core,使用Code First的模式,Code First是EF Core的一种开发模式,它允许开发人员首先定义实体类,然后通过这些实体类来创建数据库和表结构。在Code First模式中,开发人员可以使用各种注解或Fluent API配置实体类的属性、关系和约束,EF Core会根据这些配置来生成数据库架构。

使用Code First模式,开发人员可以更加关注领域模型的设计和业务逻辑的实现,而无需过多关注数据库的细节。EF Core会自动根据实体类的定义生成对应的数据库表结构,并提供一系列的API来进行数据操作,包括增删改查等。

需要注意的是,虽然EF Core支持Code First开发模式,但也支持Database First和Model First两种开发模式。Database First是通过已存在的数据库架构生成实体类,Model First是通过可视化工具设计实体类和数据库架构。开发人员可以根据具体需求选择适合的开发模式来使用EF Core。

搭建EF

首先需要下载两个包:

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

版本最好是跟框架版本对应,避免一些未知的错误

下载完成之后,需要创建LearnDbContext类,继承DbContext,

展示实体内容:

准备完成之后,需要在Api层,对上下文进行注册,同时使用Nuget包下载Domain层的两个包,将下面的代码插入到Program.cs中

//MSSQL是连接数据库字符串
builder.Services.AddDbContext<LearnDbContext>(
    d =>
    {
        d.UseSqlServer(builder.Configuration.GetConnectionString("MSSQL"));
    });
  //连接数据库字符串,在appsettings.json中定义
  "ConnectionStrings": {
    "MSSQL": "server=**;uid=**;pwd=****;database=*****"
  },

至此,准备工作已经完成,可以测试一下EF是否能够迁移成功

迁移

在迁移的时候需要注意,将Api设置成启动项,否则会报错:

Unable to create an object of type 'ApplicationDbContext'......

然后打开程序包管理控制台,输入

Add-Migration ***(代表的是名字)

运行成功之后输入

Update-Database

出现Done的时候就代表迁移成功,可以查看数据库是否有生成

标签:逻辑,数据库,EF,模式,仓储,Net,搭建,First
From: https://www.cnblogs.com/Dong-Dong-Xi/p/17719348.html

相关文章

  • Windows10 Redis数据库的搭建
    参考:https://blog.csdn.net/qq_53381910/article/details/130383352  http://wed.xjx100.cn/news/96490.html?action=onClick......
  • 关于.Net 6.0 在Linux ,Docker容器中,不安装任何依赖就生成图形验证码!!!!!!!!!!!
    在.NetFramework时代,我们生成验证码大多都是用System.Drawing。在.Net6中使用也是没有问题的。但是,System.Drawing却依赖于WindowsGDI+。为了实现跨平台,我陷入了沉思!! 微软推荐使用SkiaSharp进行替代,所以就开始了,踩坑之旅首先,安装SkiaSharp 编写好图形生成代码。......
  • Linux namespace之:network namespace
    Linuxnamespace系列文章理解networknamespacenetworknamespace用来隔离网络环境,在networknamespace中,网络设备、端口、套接字、网络协议栈、路由表、防火墙规则等都是独立的。因networknamespace中具有独立的网络协议栈,因此每个networknamespace中都有一个lo接口,但lo接......
  • 基于Unet+opencv实现天空对象的分割、替换和美化
      传统图像处理算法进行“天空分割”存在精度问题且调参复杂,无法很好地应对云雾、阴霾等情况;本篇文章分享的“基于Unet+opencv实现天空对象的分割、替换和美化”,较好地解决了该问题,包括以下内容:1、基于Unet语义分割的基本原理、环境构建、参数调节等2、一种有效的天空分割数......
  • 关于Kubernetes-v1.23.6-资源调度-Deployment-版本的回滚
    先看一下,当前笔者这里的k8s环境,主要是deployment,rs,pods相关的信息[root@k8s-masterqq-5201351]#kubectlgetdeployNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deploy3/33324h[root@k8s-masterqq-5201351]#[root@k8s-......
  • PWN环境搭建
    PWN环境搭建1、前置条件已经安好了基本的Ubuntu20.04的64位系统,我给的硬盘为35G,镜像源为阿里源。vim,git,gcc,net-tools,ssh-server等基本工具gcc没安装的,直接sudoaptinstallgcc.1.1pip换源root@hacker:/#cd$HOMEroot@hacker:~#lssnaproot@hacker:~#mkdir-p......
  • Python(Web时代)- 超简单:一行代码就能搭建网站
    From: https://mp.weixin.qq.com/s/x2dJshrAdev4FweK4kwCyA-----------------------------------------------------------------------------------介绍Streamlit是一款非常强大,可以实现快速创建和共享数据应用的Python库。借助他,我们可以在数分钟内构建出功能齐全的Web应用......
  • Netfilter日志记录
    iptables-traw-IPREROUTING-ptcp--dport80-jLOG#iptables-traw-IPREROUTING-ptcp--dport80-jLOG--log-level3--log-prefix"ipt-err:" 可以指定log级别日志级别可通过syslog定义进行查看。另外LOG目标还可指定参数:–log-tcp-sequence,–log-tcp-option......
  • IIS下部署asp.net core应用
    问题描述:IIS下部署asp.netcore应用,windows日志中经常发现如下重启信息:改善办法:每次某应用重启后,发现应用内的缓存都过期了,于是按照如下文章和以下截图将引用程序池做相应设置,该问题得到改善:主要是将启动模式改成:AlwaysRunning,将闲置时间改成0;参考文章:https://www.mo......
  • IPv6 Internet Protocol version 6协议解析
    简介1883定义了ipv6的协议,不过作废了,在2460又重新做了定义,区别不大,只是有个别字段做了扩充。2373和2374对ipv6的格式做了规定。ipv6是下一代ip地址协议,比ipv4的地址更长,可以表示更多地址段。不过由于ipv6地址太长,不方便记忆,并且ipv4的基础设施太过根深蒂固,所以目前还没有完全普......