使用 Asp .Net 8 Web Api 实现两个不同实体之间的一对一关系(实用教程)

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

本教程介绍了如何创建一个Asp .Net 8.0 Web Api项目,并使用Nuget包安装所需的依赖项。然后,创建了一些实体类和DTO类,并在DbContext中设置了一对一的关系。接下来,创建了两个Web Api控制器,用于处理Profile和User的CRUD操作。最后,配置了appsettings.json和Program.cs文件,并添加了SQLite数据库和内置的JsonSerializer。完成后,进行了迁移和数据库更新操作。

🔎

延伸解读

一对一关系的外键配置要点

在ApplicationDbContext的OnModelCreating中,通过HasOne、WithOne和HasForeignKey明确指定了Profile为依赖实体,UserID为外键。这意味着一对一关系中外键定义在Profile表上,User表不包含ProfileID。这种配置下,每个User最多关联一个Profile,且Profile必须属于一个User。若需允许Profile独立存在,则需调整关系配置。

DTO与循环引用处理

教程中定义了UserDto和ProfileDto,并在Program.cs中配置了ReferenceHandler.IgnoreCycles以处理序列化时的循环引用。由于User和Profile互相包含导航属性,直接序列化实体可能导致无限循环。使用DTO可以控制返回的数据形状,避免暴露不必要的导航属性,同时IgnoreCycles确保即使序列化实体也不会抛出异常。

控制器操作与数据加载

ProfilesController和UsersController分别处理Profile和User的CRUD。在查询时使用了Include方法加载关联实体,例如获取Profile时包含User,获取User时包含Profile。这确保了返回的数据包含关联信息。但注意,在更新操作中,仅更新了DTO中定义的字段,未处理关联实体的创建或删除,例如PutUser不会创建新的Profile。

数据库迁移与SQLite使用

教程使用SQLite作为数据库,并在appsettings.json中配置了连接字符串。通过dotnet ef migrations add InitialCreate和dotnet ef database update命令创建并应用迁移。SQLite适合开发和小型应用,但需注意其不支持某些高级关系特性。迁移命令需在项目目录下执行,确保EF Core工具已安装。

❓

Q&A

如何创建一个Asp .Net 8.0 Web Api项目?

首先创建一个Asp .Net 8.0 Web Api项目,并安装所需的Nuget包,如Microsoft.EntityFrameworkCore等。

如何在Asp .Net中设置一对一关系?

在ApplicationDbContext类中,使用OnModelCreating方法设置User和Profile之间的一对一关系,使用HasOne和WithOne方法。

如何处理Profile和User的CRUD操作?

通过创建ProfilesController和UsersController,分别实现Profile和User的CRUD操作,包括GET、POST、PUT和DELETE方法。

如何配置appsettings.json文件?

在appsettings.json中设置数据库连接字符串和日志级别,例如指定SQLite数据库的连接字符串。

如何执行数据库迁移和更新?

在项目目录中使用命令行,输入'dotnet ef migrations add InitialCreate'和'dotnet ef database update'来执行数据库迁移和更新。

如何使用DTO类进行数据传输?

在DTOs文件夹中创建UserDto和ProfileDto类,用于在API中传输User和Profile的数据。

🏷️

标签

➡️

继续阅读