c# - 模型关系导致 Swagger/端点出现问题

标签 c# api asp.net-core entity-framework-core swagger

我有两个实体:“类”和“学生”。一对多关系,我使用 EF Core:一个教室可以有多个学生,一个学生可以在一个教室中。

public class Classroom
{
    public int ClassroomId { get; set; }
    public List<Student> Students{ get; set; }
}

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set;
    public int ClassroomId { get; set; }
    public Classroom Classroom { get; set; }
}

为了使其尽可能短,我省略了用于表的 Controller、DataContext、DbSet<> 等,但我已经创建了所有这些。

现在,如果我运行我的应用程序并且想要通过 Swagger 发布类,它会在模型​​架构中包含学生列表,因此我必须创建学生列表,就好像这是我想在创建教室的同时创建的属性(property)。同样,如果我想创建/发布学生,它会将教室包含在模型架构中。

相反,我希望能够分别创建教室和学生。当我创建学生时,我希望能够仅指定教室 ID,以便我可以将学生连接到现有教室,而不是同时创建它们。

我该如何解决这个问题?我确信我误解了一些东西,所以我感谢我能得到的所有帮助。谢谢

最佳答案

How do I go about this?

向外界公开您的数据库模型。它们是您的数据库模型,而不是您的数据交换对象。除了您的 ORM 之外没有人需要看到它们或应该看到它们,您可以对它们进行注释,以便您的数据库层知道该怎么做。

您的 Controller 层应该有一组模型类,您可以使用它们通过 REST(使用 swagger)与外界通信。您可以按照您认为合适的方式构建它们,您可以对它们进行注释,以便您的 REST 层了解要做什么。

然后,您需要将从外部世界获得的模型映射到您想要使用数据库执行的操作。这应该是非常简单的。

关于c# - 模型关系导致 Swagger/端点出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67507251/

相关文章:

c# - 跳过基于模型属性之一的模型的所有验证 (ASP.Net Core 2.0)

c# - Elmah 1.2 不在 Windows 2008 IIS7.5 集成模式下登录到 SQL(但在本地工作)

c# - 有没有更短的解决方案可以从 LINQ 中选择?

c# - 当前上下文中不存在名称 '__o'

jquery - 为什么从网站执行 jQuery Ajax PUT 时会出现 CSRF 错误?从命令行运行良好。

api - 如何在源代码管理中存储 postman 收藏

api - 成功登录时应将访问 token 放在哪里?

c# - 将对象格式化为主题和正文的通用方法?

c# - 如何在 ASP.NET Core 中添加 Mime 类型

security - 如何通过 ASP.Core Kestrel 中的代码禁用弱密码套件?