c#多对多关系代码首先没有流畅的API

本文关键字:API 关系 代码 | 更新日期: 2023-09-27 18:24:06

我正在尝试先理解实体框架代码。

是否可以在不使用流利的API而仅使用DataAnnotation的情况下配置多对多关系?例如,在本教程中,我不明白这两个例子是相同的,但以不同的方式完成,还是必须同时存在。

  • 如果它们对同一件事有不同的方式,那么实际的区别是什么?

  • 如果它们必须共存,API的"部分"在做什么?

c#多对多关系代码首先没有流畅的API

你确实是对的。

本段:

使用DataAnnotation配置多对多关系:

学生类应具有Course的集合导航属性,Course应具有学生的集合导航特性

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

BTW关于";使用Fluent API配置多对多关系;是正确的,但在他们的示例代码中,他们使用它只为联接表中的外键设置了一个自定义名称,而不是让code First生成它。Foreing键重命名也可以通过使用ForeignKey属性使用Data Annotation来完成。

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

不同的是,API允许更严格的控制,以换取(可以说)更复杂。你链接的例子确实展示了两种不同的方法来有效地完成同一件事,如果你想创建特定的多对多关系,你可以使用其中一种。但是,如果你想对CourseStudents(或StudentCourse)表做一些奇怪的事情,API方法会更容易配置,而注释方法会更有限,但如果你不需要额外的功能,则更容易一目了然。