EF Fluent API 一对多关系.我应该在什么方面定义它
本文关键字:在什么 方面 定义 我应该 关系 Fluent API 一对多 EF | 更新日期: 2023-09-27 18:33:22
使用 Entity Framework Fluent API 可以在两个参与类上定义关系。我想知道这两种解决方案是否有优点或缺点。
让我演示一下。我有这些课程:
public class GroupOfAnimals
{
public int ID { get; set; }
public virtual ICollection<Animal> Members { get; set; }
}
public class Animal
{
public int ID { get; set; }
public int GroupID { get; set; }
public virtual GroupOfAnimals Group { get; set; }
}
和配置:
public class GroupOfAnimalsConfiguration : EntityTypeConfiguration<GroupOfAnimals>
{
public GroupOfAnimalsConfiguration ()
{
HasKey(o => o.ID);
//Defining relationship #1
HasMany(o => o.Members)
.WithRequired(o => o.Group)
.HasForeignKey(o => o.GroupID);
}
}
public class AnimalConfiguration : EntityTypeConfiguration<Animal>
{
public AnimalConfiguration()
{
HasKey(o => o.ID);
//Defining relationship #2
HasRequired(o => o.Group)
.WithMany(o => o.Members)
.HasForeignKey(o => o.GroupID);
}
}
如您所见,两种配置都包含相同的一对多关系。这显然是多余的。
相比之下,对于属性,在这样的情况下,什么去哪里是很清楚的:
public class GroupOfAnimals
{
[Key]
public int ID { get; set; }
[InverseProperty("Group")]
public virtual ICollection<Animal> Members { get; set; }
}
public class Animal
{
[Key]
public int ID { get; set; }
[ForeignKey("Group ")]
public int GroupID { get; set; }
[InverseProperty("Members")]
public virtual GroupOfAnimals Group { get; set; }
}
我的问题是:
我应该在哪里定义关系?在小组上?在动物身上?有什么区别吗?我应该在这里遵循明确的惯例吗?
可以在任一端定义关系。 这取决于你想怎么做,但你可能应该以你选择的任何方式保持一致。
使用一种或另一种方式没有任何好处,它们只是让您灵活地以对您最有意义的方式定义它们。 无论哪种方式,你最终都会得到同样的关系。