diff --git "a/\344\275\231\350\276\211/20240603.md" "b/\344\275\231\350\276\211/20240603.md" new file mode 100644 index 0000000000000000000000000000000000000000..95fa379ceb6f57d8141fbf71aeff8db9af0bec95 --- /dev/null +++ "b/\344\275\231\350\276\211/20240603.md" @@ -0,0 +1,16 @@ + + +### DTO 的好处: +1. **数据封装与传输**:DTO用于在不同层之间传递数据,方便数据传输。 +2. **解耦**:避免直接暴露数据库模型,减少各层之间的耦合度。 +3. **数据验证与格式化**:添加数据注释和验证属性,确保传入数据符合预期格式和约束。 +4. **安全性**:避免将敏感数据库字段直接暴露给客户端。 +5. **数据转换**:用于转换复杂数据结构为简单结构,或将客户端传入数据转换为业务逻辑处理结构。 + +### 使用 DTO 的写法: +1. **接口**:定义了对作者数据进行操作的方法,返回的数据都是 AuthorDto 类型。 +2. **服务实现接口**:包含了对作者数据进行增删改查操作的具体实现,将数据从数据库模型转换为 DTO 对象。 +3. **控制器**:调用服务层方法,保持纯洁性,根据请求类型进行相应的操作,返回相应的结果。 + +通过使用 DTO,实现了数据传输的封装、解耦、数据验证、安全性和数据转换等功能,使得不同层之间的数据传输更加清晰和可控。这种设计模式有助于提高代码的可维护性和可扩展性。 + diff --git "a/\344\275\231\350\276\211/20240604.md" "b/\344\275\231\350\276\211/20240604.md" new file mode 100644 index 0000000000000000000000000000000000000000..a25e02e20fca3177c7c57dacb670c14d7db4a28f --- /dev/null +++ "b/\344\275\231\350\276\211/20240604.md" @@ -0,0 +1,27 @@ + + +### 一、配置接口(IBookRepository): +1. **GetBookById(Guid id)**:获取指定 id 的图书。 +2. **GetAllBooks(Guid authorId)**:获取指定作者的全部图书。 +3. **AddBook(Guid authorId, AddBookDto addBookDto)**:添加图书。 +4. **UpdateBook(Guid bookId, BookDtoUpdate bookDtoUpdate)**:修改图书。 +5. **DelBook(Guid bookId)**:删除图书。 + +### 二、实现接口: +1. **AddBook(Guid authorId, AddBookDto addBookDto)**:添加图书的具体实现,包括创建新的图书对象并将其添加到数据库。 +2. **GetAllBooks(Guid authorId)**:获取指定作者的全部图书的具体实现。 +3. **GetBookById(Guid id)**:获取指定 id 的图书的具体实现。 +4. **UpdateBook(Guid bookId, BookDtoUpdate bookDtoUpdate)**:修改图书的具体实现,包括更新图书信息。 +5. **DelBook(Guid id)**:删除图书的具体实现。 + +### 三、控制器操作: +1. **Get(Guid authorId, Guid? bookId)**:根据作者 ID 获取图书信息,可以根据图书 ID 获取特定图书信息。 +2. **Post(Guid authorId, AddBookDto addBookDto)**:添加图书,需要提供作者 ID 和要添加的图书信息。 +3. **Put(Guid authorId, Guid bookId, BookDtoUpdate bookDtoUpdate)**:修改图书信息,需要提供作者 ID、图书 ID 和要更新的图书信息。 +4. **Del(Guid authorId, Guid bookId)**:删除图书,需要提供作者 ID 和要删除的图书 ID。 + +### 集合接口整理(PlantUML版): +- 图书(Books)集合接口的结构图已经展示在您提供的 PlantUML 图中,但我无法在当前环境中显示该图片。您可以参考您提供的 PlantUML 图来查看集合接口的结构。 + +通过上述接口、实现和控制器操作,实现了对图书数据的增删改查功能,保持了良好的结构化和逻辑清晰,有助于代码的可维护性和可扩展性。 + diff --git "a/\344\275\231\350\276\211/20240606.md" "b/\344\275\231\350\276\211/20240606.md" new file mode 100644 index 0000000000000000000000000000000000000000..d6a4ebbaef25b32b80edbd41bdcd68ce582b1d03 --- /dev/null +++ "b/\344\275\231\350\276\211/20240606.md" @@ -0,0 +1,56 @@ +### 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 进行数据库操作。 + diff --git "a/\344\275\231\350\276\211/20240607.md" "b/\344\275\231\350\276\211/20240607.md" new file mode 100644 index 0000000000000000000000000000000000000000..b3ac822d370548df711d6a7e5eb270acfd7b255e --- /dev/null +++ "b/\344\275\231\350\276\211/20240607.md" @@ -0,0 +1,56 @@ +### EF Core 的两种使用方法: + +#### 1. 代码优先: +- 根据先创建好的实体类来创建数据库和表。 +- EF Core会将对实体类的修改同步到数据库中,手动修改数据库可能会导致数据丢失。 +- 使用迁移(Migration)来同步代码到数据库,以增量的方式修改数据库和表结构,保持实体类和数据库一致。 + +#### 2. 数据库优先: +- 根据先创建好的数据库生成相应的代码。 + +### EF Core 添加步骤(代码优先): + +#### 1. 创建数据模型: +- 创建数据模型类,这些类将映射到数据库中的表。 + +#### 2. 配置数据库连接: +```c# +// appsettings.json +"ConnectionString": { + Mssql: "server=.;database=BookStore;uid=sa;pwd=123456;TrustServerCertificate=true;" +} +``` + +#### 3. 配置数据库上下文 DbContext: +- DbContext 是重要的类,代表程序与数据库之间的会话或数据上下文,用于查询和保存数据操作。 +- 在派生类中定义 DbSet 类型的公共属性,表示相应实体的集合,对它们的操作会反映到数据表。 + +#### 4. 注入服务,引入配置文件,实现连接数据库: +```c# +// Startup.cs +services.AddDbContext(config => + config.UseSqlServer(Configuration.GetConnectionString("Mssql")); + // 需要安装 Microsoft.EntityFrameworkCore.SqlServer 包后才能使用 UseSqlServer +) +``` + +#### 5. 生成迁移与创建数据库: +```js +// 安装 dotnet-ef 工具 +dotnet tool install -g dotnet-ef +// 生成迁移 +dotnet ef migrations add +// 创建数据库(同步) +dotnet ef database update +``` +**注意:** +- 迁移名称最好是英文且首字母大写。 +- 使用迁移前需要安装 Microsoft.EntityFrameworkCore.SqlServer 包。 +- 需要全局安装 dotnet-ef 工具。 +- 代码中不能有错误,否则迁移会报错。 + +#### 6. 添加种子数据: +- **方法一**:为种子数据建模,使用 `HasData` 方法添加种子数据。 +- **方法二**:手动向迁移添加数据或自定义操作。 +- **方法三**:自定义初始化逻辑,在应用程序启动时执行数据种子设定。 +