c#多对多关系代码先不流利API
c# many-to-many relationship code first without fluent API
我正在尝试理解 Entity Framework Code First。
是否可以在不使用 fluent API 而只使用 DataAnnotation 的情况下配置多对多关系?
例如在 this tutorial 中,我不明白这两个例子是否是同一件事但以不同的方式完成,或者它们是否必须一起存在。
如果它们是同一件事的不同方式,实际上有什么区别?
如果他们必须共存,API "part"在做什么?
它们是配置数据库的两种不同方式。它们可以共存,但不是必须;你可以只使用一个或另一个。如果您同时使用两者,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
属性,也可以使用数据注释完成外键重命名。
我正在尝试理解 Entity Framework Code First。
是否可以在不使用 fluent API 而只使用 DataAnnotation 的情况下配置多对多关系? 例如在 this tutorial 中,我不明白这两个例子是否是同一件事但以不同的方式完成,或者它们是否必须一起存在。
如果它们是同一件事的不同方式,实际上有什么区别?
如果他们必须共存,API "part"在做什么?
它们是配置数据库的两种不同方式。它们可以共存,但不是必须;你可以只使用一个或另一个。如果您同时使用两者,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
属性,也可以使用数据注释完成外键重命名。