2014-12-05 59 views
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; } 
} 

我的問題是:

我應該在哪裏定義的關係?在小組上?在動物?有什麼區別嗎?我應該在這裏遵循明確的約定嗎?

回答

1

關係可以在任一端定義。這取決於你如何去做,但你應該以任何你選擇的方式保持一致。

使用這種或那種方式沒有任何優勢,他們只是給你靈活性來定義它們,無論哪種方式對你最有意義。無論哪種方式,你都會得到同樣的關係。

+0

謝謝你的回答。讓我有信心選擇我認爲更好的方式,因爲知道任何一種方式都是好的。我最終定義了導航屬性更直接的一方的關係,但在其他方面的配置中做出了評論,以標示其他開發者沒有忘記關係,但是在其他地方配置了它。 – SoonDead 2014-12-07 14:19:37

相關問題