定义关系时什么时候必须使用 fluent api
when is it mandatory to use fluent api when defining relationships
我想知道在定义 1:M、1:1 和 M:M 关系时是否必须使用流畅的 api。我知道 fluent api 提供了数据注释无法提供的更多功能。但是,如果我们只考虑没有额外要求的直接关系(例如,重命名 M:M 关系中的外键,或 CascadeOnDelete 等),我们是否可以只依赖数据注释?或者出于某些原因还是使用流利的 api 更好?
您可以结合使用两者。就我个人而言,我更喜欢数据注释,因为在您写出 class 时设置它们对我来说似乎更简单。由于它包含在此处,因此以后参考起来也更容易。正如您所说,有时您需要使用 fluent api 来修改某些内容,但如果您不需要,则使用数据注释可以减少输入。
事实上,如果您处理的是简单的关系,大多数时候甚至不需要显式使用数据注释,因为 EF 可以根据键和命名约定推断出关系。
你可以用 DataAnnotation
做的一切你可以用 FluentAPI
做,但反之则不然。某些功能仅在 FluentAPI
.
中可用
我应该使用哪个?
取决于您要做什么。
一些关系可以在class结构中声明。例如,n:m 关系可以声明如下:
public class Foo
{
public ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public ICollection<Foo> Foos { get; set; }
}
EF 将识别 n:m: 关系并创建 "third table"。但是,如果你想"choose"第三个-table的名字,你必须使用FluentAPI
.
modelBuilder.Entity<Foo>()
.HasMany(s => s.Bars)
.WithMany(c => c.Foos)
.Map(cs =>
{
cs.MapLeftKey("FooId");
cs.MapRightKey("BarId");
cs.ToTable("FooBarRelationship");
});
DataAnnotation
比FluentAPI
更简单,但是如果你的classes位于不同的程序集,你必须添加System.Data.ComponentModel
的引用,什么这不好。
FluentAPI
看似复杂,但DataAnnotation
能做到的它都能做到,甚至更多。此外,您可以在 class 之外使用它而不会出现问题。特别是我更喜欢FluentAPI
,因为它看起来更干净和有条理。
此外,如果您选择 DataAnnotation
,请记住您可能还必须使用 FluentAPI
。所以,如果你只想使用一种方法,你必须选择FluentAPI
。
我想知道在定义 1:M、1:1 和 M:M 关系时是否必须使用流畅的 api。我知道 fluent api 提供了数据注释无法提供的更多功能。但是,如果我们只考虑没有额外要求的直接关系(例如,重命名 M:M 关系中的外键,或 CascadeOnDelete 等),我们是否可以只依赖数据注释?或者出于某些原因还是使用流利的 api 更好?
您可以结合使用两者。就我个人而言,我更喜欢数据注释,因为在您写出 class 时设置它们对我来说似乎更简单。由于它包含在此处,因此以后参考起来也更容易。正如您所说,有时您需要使用 fluent api 来修改某些内容,但如果您不需要,则使用数据注释可以减少输入。
事实上,如果您处理的是简单的关系,大多数时候甚至不需要显式使用数据注释,因为 EF 可以根据键和命名约定推断出关系。
你可以用 DataAnnotation
做的一切你可以用 FluentAPI
做,但反之则不然。某些功能仅在 FluentAPI
.
我应该使用哪个?
取决于您要做什么。
一些关系可以在class结构中声明。例如,n:m 关系可以声明如下:
public class Foo
{
public ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public ICollection<Foo> Foos { get; set; }
}
EF 将识别 n:m: 关系并创建 "third table"。但是,如果你想"choose"第三个-table的名字,你必须使用FluentAPI
.
modelBuilder.Entity<Foo>()
.HasMany(s => s.Bars)
.WithMany(c => c.Foos)
.Map(cs =>
{
cs.MapLeftKey("FooId");
cs.MapRightKey("BarId");
cs.ToTable("FooBarRelationship");
});
DataAnnotation
比FluentAPI
更简单,但是如果你的classes位于不同的程序集,你必须添加System.Data.ComponentModel
的引用,什么这不好。
FluentAPI
看似复杂,但DataAnnotation
能做到的它都能做到,甚至更多。此外,您可以在 class 之外使用它而不会出现问题。特别是我更喜欢FluentAPI
,因为它看起来更干净和有条理。
此外,如果您选择 DataAnnotation
,请记住您可能还必须使用 FluentAPI
。所以,如果你只想使用一种方法,你必须选择FluentAPI
。