2013-11-26 52 views
1

我有一個簡單的對象,可以是父組對象的子對象。複雜的是,父組可以是兩個「類型」(不是C#類型)中的一個,由enum屬性指示,每個子對象只能在每個類型中的一箇中。這可能會與類更有意義:在實體框架中設置相同對象之間的2個關係

public class Child 
    { 
     public string Value { get; set; } 
     public int? ParentGroup1Id{ get; set; } 
     public int? ParentGroup2Id { get; set; } 
     public ParentGroup ParentGroup1 { get; set; } 
     public ParentGroup ParentGroup2 { get; set; } 
    } 

    public class ParentGroup 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public GroupType GroupType { get; set; } 
     public IList<Child> Children1 { get; set; } 
     public IList<Child> Children2 { get; set; } 
    } 

我已經建立了針對兒童的EF地圖:

public class ChildMap : EntityTypeConfiguration<Child> 
    { 
     public ChildMap() 
     { 
      HasKey(t => t.Value); 

      HasOptional(c => c.ParentGroup1) 
      .WithMany(pg => pg.Children1) 
      .HasForeignKey(c => c.ParentGroup1Id); 

      HasOptional(c => c.ParentGroup2) 
      .WithMany(pg => pg.Children2) 
      .HasForeignKey(c => c.ParentGroup2Id); 
     } 
    } 

在我的背景下,我已在DBSets兩個對象了:

public IDbSet<Child> Children { get; set; } 
    public IDbSet<ParentGroup> ParentGroups { get; set; } 

當我去那個訪問數據庫的頁面時,我得到以下錯誤:

Additional information: Schema specified is not valid. Errors: The relationship 'ServiceLayer.Contexts.Child_ParentGroup' was not loaded because the type 'ServiceLayer.Contexts.ParentGroup' is not available.

順便說一句,一切都在ServiceLayer命名空間中。

我猜想,它不認爲這些是有效的關係,但我不夠好與EF知道如何設置這種關係。有沒有辦法讓這個工作,還是我必須完全改變它?

回答

1

感謝提供的答案here,我拿出WithMany調用的內容,並且解決了它。

所以,我ChildMap現在看起來是這樣的:

public class ChildMap : EntityTypeConfiguration<Child> 
    { 
      public ChildMap() 
      { 
      HasKey(t => t.Value); 

      HasOptional(c => c.ParentGroup1) 
       .WithMany() 
       .HasForeignKey(c => c.ParentGroup1Id); 

      HasOptional(c => c.ParentGroup2) 
       .WithMany() 
       .HasForeignKey(c => c.ParentGroup2Id); 
     } 
    } 

我猜測,給它一個參數嘗試設置的關係了兩個方向,並在ParentGroup兒童藏品過於含糊。

我現在有一個ParentGroupMap建立從最終的關係(的東西,我在最初的嘗試都試過,但它並沒有與ChildMap工作):

public class ParentGroupMap : EntityTypeConfiguration<ParentGroup> 
    { 
     public ParentGroupMap() 
     { 
      HasMany(pg => pg.Children1) 
       .WithOptional(c => c.ParentGroup1) 
       .HasForeignKey(c => c.ParentGroup1Id); 

      HasMany(pg => pg.Children2) 
       .WithOptional(c => c.ParentGroup2) 
       .HasForeignKey(c => c.ParentGroup12d); 
     } 
    } 
相關問題