c#多对多关系代码先不流利API

c# many-to-many relationship code first without fluent API

我正在尝试理解 Entity Framework Code First。

是否可以在不使用 fluent API 而只使用 DataAnnotation 的情况下配置多对多关系? 例如在 this tutorial 中,我不明白这两个例子是否是同一件事但以不同的方式完成,或者它们是否必须一起存在。

它们是配置数据库的两种不同方式。它们可以共存,但不是必须;你可以只使用一个或另一个。如果您同时使用两者,Fluent API 优先于数据注释,但数据注释仍优先于默认约定。

不同之处在于 API 允许更严格的控制程度,以换取(可以说)更复杂。您链接的示例确实显示了有效完成同一件事的两种不同方式,如果您想创建特定的多对多关系,您可以使用其中一种。但是,如果您想对 CourseStudents(或 StudentCourse)table 做一些奇怪的事情,API 方法将更具可配置性,而注释方法将受到更多限制,但如果您一目了然更容易阅读不需要额外的功能。

确实你是对的。

这段:

Configure Many-to-Many relationship using DataAnnotation:

Student class should have a collection navigation property for Course, and Course should have a collection navigation property for student,

错了。因为当您在每个 class 中添加一个集合时,示例代码中的多对多关系是按照约定自动创建的。唯一使用的数据注释是 Required 属性,它在多对多关系中并不隐含。

顺便说一句,关于“使用 Fluent API 配置多对多关系”的部分是正确的,但在他们的示例代码中,他们只使用它为连接中的外键添加自定义名称 table 而不是让 Code First 生成它。通过使用 ForeignKey 属性,也可以使用数据注释完成外键重命名。