首页 > 其他分享 >第一单元 ORM 介绍

第一单元 ORM 介绍

时间:2023-11-26 10:11:56浏览次数:35  
标签:Core -- 数据库 EF 介绍 EntityFrameworkCore ORM 工具 单元

需要有的知识点:

  1. c# 基础以及c#高级基础

  2. Ado.net 基础

  3. SqlServer 以及MySQL (都需要高级部分)

  4. Asp.net Mvc Core 基础

 

1. 新手的烦恼

(1) SQL 拼不对,错还不会找

(2) 开发效率低

(3) 如果发现字段需要重命名,得挨个地方去修改

(4) 老板说要把SQLServer换成MySQL数据库,并且需要快速上线,此时你想的不是快速上线,而是快速离职

 

ORM 框架基本解决了上述的所有问题。

 

2. 什么是ORM

ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

 

ORM框架的优/缺点

优点:

  1. 提高开发效率

  2. 更符合面向对象思想

  3. 可以快速重命名

  4. 可以无缝切换数据库

缺点:

  1. 降低了系统的执行效率

  2. 遇到很复杂的查询时,显得有些吃力

 

常见的ORM框架

  1. EntityFramework Core

  2. NHibnate(年代久远)

  3. SqlSugger(当下比较流行)

  4. Dapper(半ORM)

  5. MyBatis.Net (需要写一大堆的XML)

  6. MyBatisPlus (Java开发最流行)

 

选择EntityFrameworkCore的原因:

  1. 微软的亲儿子, 对接了微软的众多其他需要数据访问的框架,例如ASP.NET Identity,ASP.NET WebApi

  2. 全面支持LINQ查询

  3. EFCore性能提升, 已非常接近原生的ADO.NET框架了

  4. 数据库迁移功能 ,可以动态创建数据库或者修改数据库

 

3. EntityFrameworkCore概述

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:

  • 使 .NET 开发人员能够使用 .NET 对象处理数据库。

  • 无需再像平常那样编写大部分数据访问代码。

EF Core 支持多个数据库引擎,请参阅数据库提供程序了解详细信息。

1. 模型开发方式

对于 EF Core,使用模型执行数据访问。 模型由实体类和表示数据库会话的上下文对象构成。 上下文对象允许查询并保存数据。 有关详细信息,请参阅创建模型

EF 支持以下模型开发方法:

  • 从现有数据库生成模型(DbFirst)。

  • 对模型手动编码,使其符合数据库(DbFirst)。

  • 创建模型后,使用 EF 迁移从模型创建数据库。 模型发生变化时,迁移可让数据库不断演进(CodeFirst)。

 

2. EF O/RM 注意事项

虽然 EF Core 善长提取许多编程详细信息,但还是有一些适用于任何 O/RM 的最佳做法,可帮助避免生产应用中的常见陷阱:

  • 若要在高性能生产应用中构建、调试、分析和迁移数据,必须具备基础数据库服务器的中级知识或更高级别的知识。 例如,有关主键和外键、约束、索引、标准化、DML 和 DDL 语句、数据类型、分析等方面的知识。

  • 功能和集成测试:请务必尽可能严密地复制生产环境,以便:

    • 查找仅在使用特定版本的数据库服务器时应用才出现的问题。

    • 在升级 EF Core 和其他依赖项时捕获中断性变更。 例如,添加或升级 ASP.NET Core、OData 或 AutoMapper 等框架。 这些依赖项可能以多种意外方式影响 EF Core。

  • 通过代表性负载进行性能和压力测试。 某些功能的不成熟用法缩放性不佳。 例如,多项集合包含内容、大量使用延迟加载、对未编制索引的列执行条件查询、对存储生成的值进行大规模更新和插入、缺乏并发处理、大型模型、缓存策略不充分。

  • 安全评审:例如,连接字符串和其他机密处理、非部署操作的数据库权限、原始 SQL 的输入验证、敏感数据加密。

  • 确保日志记录和诊断充足且可用。 例如,适当的日志记录配置、查询标记和 Application Insights。

  • 错误恢复。 为常见故障场景(如版本回退、回退服务器、横向扩展和负载平衡、DoS 缓解和数据备份)准备应急计划。

  • 生成的迁移的详细检查和测试。 将迁移应用于生产数据前,应对其进行全面测试。 若表中包含生产数据,架构的形状和列类型就不能轻易更改。 例如,在 SQL Server 上,对于映射到字符串和十进制属性的列,nvarchar(max)decimal(18, 2) 极少成为最佳类型,但这些是 EF 使用的默认值,因为 EF 不了解你的具体情况。

 

4. Nuget 包

1. 包版本

请务必安装 Microsoft 提供的所有 EF Core 包的同一版本。 例如,如果安装了 5.0.3 版本的 Microsoft.EntityFrameworkCore.SqlServer,则所有其他 Microsoft.EntityFrameworkCore.* 包也必须为 5.0.3 版本。

此外,请确保所有外部包都与所使用的 EF Core 的版本兼容。 特别是,检查外部数据库提供程序是否支持你所使用的 EF Core 版本。 EF Core 的新主版本通常需要更新的数据库提供程序。

警告

NuGet 不强制使用一致的包版本。 请始终仔细检查你在 .csproj 文件或等效

 

2. 数据库提供程序

EF Core 通过使用“数据库提供程序”支持不同的数据库系统。 每个系统都有自己的数据库提供程序,而提供程序以 NuGet 包的形式提供。 应用程序应安装其中一个或多个提供程序包。

下表列出了常见的数据库提供程序。 有关可用提供程序的更全面列表,请参阅数据库提供程序

数据库系统配置示例NuGet 程序包
SQL Server 或 Azure SQL .UseSqlServer(connectionString) Microsoft.EntityFrameworkCore.SqlServer
Azure Cosmos DB .UseCosmos(connectionString, databaseName) Microsoft.EntityFrameworkCore.Cosmos
SQLite .UseSqlite(connectionString) Microsoft.EntityFrameworkCore.Sqlite
EF Core 内存中数据库 .UseInMemoryDatabase(databaseName) Microsoft.EntityFrameworkCore.InMemory
PostgreSQL* .UseNpgsql(connectionString) Npgsql.EntityFrameworkCore.PostgreSQL
MySQL/MariaDB* .UseMySql(connectionString) Pomelo.EntityFrameworkCore.MySql
Oracle* PLSQL .UseOracle(connectionString) [Oracle.EntityFrameworkCore](

这些是由社区开发和提供的热门高质量开源提供程序。 列出的其他提供程序由 Microsoft 提供。

仔细考虑是否使用内存中提供程序。 它不是为生产用途而设计的,也可能不是用于测试的最佳解决方案

 

3. 工具

 $ dotnet tool --help

install <PACKAGE_ID> 安装全局或本地工具。本地工具将被添加到清单并还原。
uninstall <PACKAGE_ID> 卸载全局工具或本地工具。
update <PACKAGE_ID> 更新全局工具。
list 列出全局或本地安装的工具。
run <COMMAND_NAME> 运行本地工具。
search <搜索词> 在 nuget.org 中搜索 dotnet 工具
restore 还原本地工具清单中定义的工具。

使用用于 EF Core 迁移现有数据库中的反向工程(基架)的工具需要安装相应的工具包:

请参阅 Entity Framework Core 工具参考,详细了解如何使用 EF Core 工具,包括如何在项目中或在全局范围内正确安装 dotnet-ef 工具。

$ dotnet tool install --help

-g, --global 为当前用户安装工具。
--local 安装工具并将其添加到本地工具清单(默认)。
--tool-path <PATH> 将安装工具的目录。如果目录不要放置测试结果的目录。若不存在,将创建指定目录。存在,将创建该目 录。
--version <VERSION> 要安装的工具包版本。
--configfile <FILE> 要使用的 NuGet 配置文件。
--tool-manifest <PATH> 清单文件的路径。
--add-source <SOURCE> 添加其他要在安装期间使用的 NuGet 包源。
--framework <FRAMEWORK> 要安装工具的目标框架。
--prerelease 正在确定是否包括预发行包。
--disable-parallel 防止并行还原多个项目。
--ignore-failed-sources 将包源失败视为警告。
--no-cache 不要缓存包和 HTTP 请求。
--interactive 允许命令停止和等待用户输入或操作(例如,用以完成身份验证)。
-v, --verbosity <LEVEL> 设置 MSBuild 详细程度。允许值为 q[uiet]、m[inimal]、n[ormal]、d[etailed] 和 diag[nostic]。
-a, --arch <arch> 目标体系结构。
-?, -h, --help 显示命令行帮助。

安装.Net CLI

详细步骤,请看第四单元 :数据迁移部分

$ dotnet tool install -g --version 6.0.4 dotnet-ef
常用选项
选项Short说明
--json   显示 JSON 输出。
--context <DBCONTEXT> -c 要使用的 DbContext 类。 仅类名或完全限定命名的空间。 如果省略此选项,EF Core 将查找上下文类。 如果有多个上下文类,则此选项是必需的。
--project <PROJECT> -p 目标项目的项目文件夹的相对路径。 默认值是当前文件夹。
--startup-project <PROJECT> -s 启动项目的项目文件夹的相对路径。 默认值是当前文件夹。
--framework <FRAMEWORK>   目标框架目标框架名字对象。 当项目文件指定了多个目标框架,并且你想要选择其中一个目标框架时,请使用此选项。
--configuration <CONFIGURATION>   生成配置,例如 DebugRelease
--runtime <IDENTIFIER>   要为其还原包的目标运行时的标识符。 有关运行时标识符 (RID) 的列表,请参阅 RID 目录
--no-build   请勿生成项目。 旨在在生成处于最新状态时使用。
--help -h 显示帮助信息。
--verbose -v 显示详细输出。
--no-color   请勿为输出着色。
--prefix-output   具有级别的前缀输出。

 

 

视频配套链接:课程简介 (cctalk.com)

标签:Core,--,数据库,EF,介绍,EntityFrameworkCore,ORM,工具,单元
From: https://www.cnblogs.com/xuyubing/p/17856573.html

相关文章

  • huggingface_hub.utils._validators.HFValidationError: Repo id must be in the form
    问题:2023-11-2607:45:38|ERROR|stderr|raiseHFValidationError(2023-11-2607:45:38|ERROR|stderr|huggingface_hub.utils._validators.HFValidationError:Repoidmustbeintheform'repo_name'or'namespace/repo_name':'/mnt......
  • Day03 JavaSE介绍与安装卸载
    1.Java三大版本javaSE:标准版(桌面程序,控制台程序开发)JavaME:精简版(嵌入式开发)javaEE:企业级开发(web开发,服务器开发)2.JDK、JRE、JVMJDK:javadevelopmentkitJRE:javaruntimeenvirnmentJVM:javavirtualmachine其中JDK包含了JRE与JVM。JRE包含了JVM。安装了JRE后......
  • SQL 注入的基本概念介绍和预防
    SQL注入是一种常见的网络攻击手段,通过利用程序的安全漏洞,向服务器提交恶意的SQL查询代码,从而实现攻击者读取数据、修改数据、执行管理员操作等目的。SQL注入的原理是,当应用程序在处理用户输入的数据时,如果没有进行有效的安全防护,用户输入的数据可能会被直接拼接到SQL查询语......
  • String.format()方法占位符
    格式化字符串由4部分组成,特殊的格式常以%index$开头,index从1开始取值,表示将第index个参数拿进来进行格式化,[最小宽度]的含义也很好理解,就是最终该整数转化的字符串最少包含多少位数字。剩下2个部分的含义:标识如下:-在最小宽度内左对齐,不可以与"用0填充"同时使用#只适用于8进制和16进......
  • Java 程序里 transient 关键字的使用方法介绍
    在Java中,transient是一个关键字,主要被用于管理序列化过程中哪些字段需要被忽略。在序列化过程中,如果一个字段被声明为transient,那么这个字段就不会被序列化。什么是序列化呢?序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,序列化可以通过实现java.io......
  • 在 Go-Kratos 框架中优雅的使用 GORM 完成事务
    准备工作创建新项目kratosnewhelloworldcdhelloworld#拉取项目依赖gomoddownload#项目中的config等请自行修改 添加事务如果您还不了解Kratos、mysql事务和GORM的话请先了解一下。data层承载事务是否比较合适?其实最简单也最直接的方法就是在da......
  • python学习笔记-websocket介绍
    一、websocket介绍概述-http,socket实现,短链接,请求响应-websocket,socket实现,双工通道,请求响应,推送socket创建连接,不断开二、websocket握手过程分析socket入手-服务端(socket服务端)1、服务端开启socket,监听IP和端口3、允许连接*5、服务端接收特殊值【加密sha1,特殊值,magic......
  • API成批分配漏洞介绍
    API成批分配漏洞介绍API特定:可利用性2    利用通常需要了解业务逻辑、对象关系和API结构。在API中利用批量分配更容易,因为按照设计,它们公开了应用程序的底层实现以及属性名称。安全弱点:     现代框架鼓励开发人员使用自动将客户端输入绑定到代码变量和内部对象......
  • 软件测试面试怎样介绍自己的测试项目?会问到什么程度?
    想知道面试时该怎样介绍测试项目?会问到什么程度?那就需要换位思考,思考HR在这个环节想知道什么。HR在该环节普遍想获得的情报主要是下面这2个方面:1)应聘者的具体经验和技术能力,2)应聘者的团队的沟通能力、合作能力和问题解决能力。了解到HR目的后,我们就能预判出项目面试题的广度......
  • 第九单元 连接查询
     请问上图中显示的数据是一张表中的吗?1.连接查询的分类内连接外连接(左外连接,右外连接,全连接)自连接交差连接(不讲)2.内连接注意:Join与innerjoin等效(默认为内连接)语法格式:select字段列表from表1innerjoin表2on表1.外键=表2.外键内连接:会把两......