From 8347442fb3911270a19c6f4dad8af6586b300c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E4=BC=9F?= <1571831274@qq.com> Date: Sun, 9 Jun 2024 22:47:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\345\217\243\346\200\273\347\273\223.md" | 29 +++++++ ...66\347\232\204\344\275\234\347\224\250.md" | 21 ++++++ "20240606-EF Core\347\256\200\344\273\213.md" | 55 ++++++++++++++ ...00\345\215\225\344\275\277\347\224\250.md" | 75 +++++++++++++++++++ 4 files changed, 180 insertions(+) create mode 100644 "20240603-\345\270\270\347\224\250\351\233\206\345\220\210\346\216\245\345\217\243\346\200\273\347\273\223.md" create mode 100644 "20240604-\346\200\273\347\273\223\351\241\271\347\233\256\344\270\255\346\226\207\344\273\266\347\232\204\344\275\234\347\224\250.md" create mode 100644 "20240606-EF Core\347\256\200\344\273\213.md" create mode 100644 "20240607-EF Core\347\256\200\345\215\225\344\275\277\347\224\250.md" diff --git "a/20240603-\345\270\270\347\224\250\351\233\206\345\220\210\346\216\245\345\217\243\346\200\273\347\273\223.md" "b/20240603-\345\270\270\347\224\250\351\233\206\345\220\210\346\216\245\345\217\243\346\200\273\347\273\223.md" new file mode 100644 index 0000000..f9c1376 --- /dev/null +++ "b/20240603-\345\270\270\347\224\250\351\233\206\345\220\210\346\216\245\345\217\243\346\200\273\347\273\223.md" @@ -0,0 +1,29 @@ +### IEnumerable +方法: +`GetEnumerator()`:返回一个实现 IEnumerator 接口的枚举器,用于遍历集合中的元素。 +### ICollection +方法: +`Add(T item)`:将元素添加到集合。 +`Clear()`:清空集合中的所有元素。 +`Contains(T item)`:检查集合中是否包含特定元素。 +`Remove(T item)`:从集合中移除特定元素。 +`Count`:获取集合中元素的数量。 +### IList +方法(除了 `ICollection` 中的方法外): +`Insert(int index, T item)`:在指定位置插入元素。 +`RemoveAt(int index)`:移除指定位置的元素。 +`this[int index]`:通过索引访问元素。 +### IDictionary +方法: +`Add(TKey key, TValue value)`:向字典中添加键值对。 +`ContainsKey(TKey key)`:检查字典中是否包含指定键。 +`ContainsValue(TValue value)`:检查字典中是否包含指定值。 +`Remove(TKey key)`:移除具有指定键的元素。 +`TryGetValue(TKey key, out TValue value)`:尝试获取与指定键关联的值。 +### IQueryable +方法(用于 LINQ 查询): +`Where()`:根据条件筛选序列中的元素。 +`Select()`:将序列中的元素投影到新表中。 +`OrderBy()`:根据指定的条件对序列中的元素进行排序。 +`Skip()`:跳过序列中指定数量的元素。 +`Take()`:从序列的开头返回指定数量的连续元素。 \ No newline at end of file diff --git "a/20240604-\346\200\273\347\273\223\351\241\271\347\233\256\344\270\255\346\226\207\344\273\266\347\232\204\344\275\234\347\224\250.md" "b/20240604-\346\200\273\347\273\223\351\241\271\347\233\256\344\270\255\346\226\207\344\273\266\347\232\204\344\275\234\347\224\250.md" new file mode 100644 index 0000000..448553b --- /dev/null +++ "b/20240604-\346\200\273\347\273\223\351\241\271\347\233\256\344\270\255\346\226\207\344\273\266\347\232\204\344\275\234\347\224\250.md" @@ -0,0 +1,21 @@ +**在一个典型的软件项目中,通常会使用不同的层次结构和模块来组织代码,以实现更好的可维护性、可扩展性和代码复用性。以下是一些常见的模块和它们的作用:** +### 启动文件(Startup) +- 作用:启动文件用于配置应用程序的启动过程,包括配置服务、中间件、依赖注入等。在 ASP.NET Core 中,通常使用 Startup.cs 文件来配置应用程序。 + +### 控制器文件(Controllers) +- 作用:控制器文件包含用于处理 HTTP 请求的控制器类。控制器负责接收请求、处理业务逻辑,并返回响应。 + +### Domain(领域层) +- 作用:领域层包含表示业务领域概念的类和逻辑。这些类通常反映了业务实体、值对象、业务规则等。领域层负责处理业务逻辑和状态,并与数据库无关。 + +### Db(数据访问层) +- 作用:数据访问层用于与数据库进行交互,包括数据的读取、写入、更新和删除等操作。该层通常包含数据访问对象(DAO)、仓储(Repository)等。 + +### Services(服务层) +- 作用:服务层包含应用程序的核心业务逻辑,通常实现了业务需求和流程。服务层通过调用领域层和数据访问层来完成业务操作。 + +### Interface(接口层) +- 作用:接口层定义了系统的外部接口,包括用户界面、API 接口等。接口层通常与服务层交互,将用户请求转发给服务层进行处理。 + +### Dto(数据传输对象) +- 作用:数据传输对象用于在不同层之间传输数据,通常用于将领域对象转换为在不同层之间传递的数据结构。DTO 可帮助解耦不同层之间的依赖关系。 \ No newline at end of file diff --git "a/20240606-EF Core\347\256\200\344\273\213.md" "b/20240606-EF Core\347\256\200\344\273\213.md" new file mode 100644 index 0000000..9afde7f --- /dev/null +++ "b/20240606-EF Core\347\256\200\344\273\213.md" @@ -0,0 +1,55 @@ +### EF Core 简介: + +#### 1. 概念: +- **EF Core(Entity Framework Core)**:是基于.NET Core的轻量级ORM框架,用于处理数据库与高级编程语言对象之间的映射关系。 +- **ORM**:对象关系映射,能够处理数据库与高级编程语言中对象之间的映射关系。 + +#### 2. .NET对象与关系型数据库的对应关系: + +| .NET对象 | 关系型数据库 | +|-------------------|--------------| +| 类 | 表 | +| 类的属性或字段 | 表中的列 | +| 集合中的元素 | 表中的行 | +| 对于其他类的引用 | 外键 | + +#### 3. 支持 LINQ(集成语言查询): +- **查询所有**: + ```c# + var result = from item in collection + select item; + ``` +- **过滤**: + ```c# + var result = from item in collection + where price > 10 + select item; + ``` +- **排序**: + ```c# + var result = from item in collection + orderby item.Property ascending/descending + select item; + ``` + (ascending:升序,默认;descending:降序) +- **连接查询**: + ```c# + var query = from person in people + join address in addresses on person.AddressId equals address.Id + select new { person.Name, address.City }; + ``` + +### 在项目中添加 EF Core: + +#### 1. 安装包: +```js +dotnet add package Microsoft.EntityFrameworkCore +``` + +#### 2. 安装提供程序: +```js +// 以 SQL Server 为例 +dotnet add package Microsoft.EntityFrameworkCore.SqlServer +``` + +通过 EF Core,您可以轻松地进行对象与关系型数据库之间的映射,并利用 LINQ 进行灵活的数据查询和操作。安装 EF Core 包和相应的数据库提供程序后,您可以开始在项目中使用 EF Core 进行数据库操作。 \ No newline at end of file diff --git "a/20240607-EF Core\347\256\200\345\215\225\344\275\277\347\224\250.md" "b/20240607-EF Core\347\256\200\345\215\225\344\275\277\347\224\250.md" new file mode 100644 index 0000000..3800954 --- /dev/null +++ "b/20240607-EF Core\347\256\200\345\215\225\344\275\277\347\224\250.md" @@ -0,0 +1,75 @@ +## 一、EF Core的两种使用方法 + +### 数据库优先 +根据先创建好的数据库生成相应的代码 + +### 代码优先(推荐使用) +- 根据先创建好的实体类来创建数据库和表 +- EF Core会将对实体类的修改同步到数据库中,都是对数据库手工修改将会在EF Core同步数据后丢失 +- 用于同步代码到数据库的方法是迁移(Migration),就是提供以增量的方式来修改数据库和表结构,使实体类和数据库保持一致 + +## 二、EF Core的添加步骤 +### 1.创建数据模型 +创建数据模型类,这些类将映射到数据库中的表 + +### 2. 配置数据库连接 +```c# +// appsetting.json +"ConnectionString":{ + Mssql:"server=.;database(数据库名称)=BookStore;uid(数据库服务器登录名)=sa;pwd(密码)=123456;TrustServerCertificate(验证服务器证书)=true;" +} +``` + +### 3.配置数据库上下文DbContext +- DbContext是非常重要的类,代表程序与数据库之间的会话或数据上下文,能够完成查询和保存数据等操作 +- 它的派生类中有若干个DbSet类型的公告属性,表示相应实体的集合,对它们的操作最后会反映到数据表 +```c# +// Db/BookStoreDbContext.cs +using Microsoft.EntityFrameworkCore; +namespace BookStore.Api.Db; +public class BookStoreDbContext:DbContext +{ + public DbSet Authors {get;set;} + public DbSet Books {get;set;} + // 构造函数接受一个 DbContextOptions 类型的参数 + // 将该参数传递给基类的构造函数 base(options) + // 这个构造函数用于配置数据库上下文的选项,例如数据库提供程序、连接字符串等 + public BookStoreDbContext(DbContextOptions options):base(options) + { + + } +} +``` +**注意点:** +- 提供正确的连接字符串 +- 必须构造函数选项配置 + +### 4.注入服务,引入配置文件,实现连接数据库 +```c# +// Startup.cs +servuces.AddDbContext(config => + config.UseSqlServer(Configuration.GetConnectionString("Mssql")); + // 也可以直接在GetConnectionString()里写连接字符串内容 +) +``` +**注意:** +这里UseSqlServer只有在Microsoft.EntityFrameworkcore.SqlServer包安装后才可以使用 + +### 5.生成迁移与创建数据库 +```js +// 安装dotnet-ef工具 +dotnet tool install -g dotnet-ef +// 生成迁移 +dotnet ef migrations add <迁移名称> +// 如果迁移成功就会出现Migrations文件夹 + +// 创建数据库(同步) + +dotnet ef database update +// 创建成功就会在数据库出现表,其中会自带一个名为_EFMigrationsHistory的表,这是存储迁移的历史记录,删除就会导致程序运行失败 +``` +**注意:** +- 迁移名称最好是英文且首字母大写 +- 使用迁移前需要安装Microsoft.EntityFrameworkcore +- 需要全局安装dotnet-ef工具 +- 代码不能有错误,否则迁移中会报错 \ No newline at end of file -- Gitee