1
使用Entity Framework Fluent API,可以在兩個參與類上定義關係。我想知道是否有任何解決方案的優點或缺點。EF 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; }
}
我的問題是:
我應該在哪裏定義的關係?在小組上?在動物?有什麼區別嗎?我應該在這裏遵循明確的約定嗎?
謝謝你的回答。讓我有信心選擇我認爲更好的方式,因爲知道任何一種方式都是好的。我最終定義了導航屬性更直接的一方的關係,但在其他方面的配置中做出了評論,以標示其他開發者沒有忘記關係,但是在其他地方配置了它。 – SoonDead 2014-12-07 14:19:37