0

EF CodeFirst和關係0/1到0/1有一些問題。我有3個「表」,其中包含另一個,這是可選的。EF代碼與各種父母的第一個關係0/1到0/1

它類似於:

[DataContract] 
public class A 
{ 
    [DataMember, Key] 
    public int Id {get;set;} 
    [DataMember] 
    public int? IdD 
    [ForeignKey("idD")] 
    public virtual D D {get; set;} 
} 
[DataContract] 
public class B 
{ 
    [DataMember, Key] 
    public int Id {get;set;} 
    [DataMember] 
    public int? IdD 
    [ForeignKey("idD")] 
    public virtual D D {get; set;} 
} 
[DataContract] 
public class C 
{ 
    [DataMember, Key] 
    public int Id {get;set;} 
    [DataMember] 
    public int? IdD 
    [ForeignKey("idD")] 
    public virtual D D {get; set;} 
}  
[DataContract] 
public class D 
{ 
    [DataMember, Key] 
    public int Id {get;set;} 

    public virtual A A { get; set; } 
    public virtual B B { get; set; } 
    public virtual C C { get; set; } 
} 

當我嘗試做的遷移,出現錯誤:

 
Unable to determine the principal end of an association between the types 'XXXXXX' and 'XXXXXX'. 
The principal end of this association must be explicitly configured using either the relationship 
fluent API or data annotations. 

我嘗試用DataAnnotations和Fluent API,並出現相同的錯誤。在流利的API我嘗試:

與A,B或C類

 this.HasOptional(casv => casv.D) 
      .WithOptionalDependent(e => e.A)//I try with denendent and Principal 
      .Map(m => m.MapKey("IdD")) // I try without this 
      .WillCascadeOnDelete(true); 

回答

0

試試這個,我認爲這是更好看的比你的代碼:

this.HasOptional(casv => casv.D) 
    .WithOptionalDependent(e => e.A) 
    .Map(m => m.MapKey("IdD")) 
    .WillCascadeOnDelete(true); 
+0

謝謝的,但在問題出現此代碼,請你沒有複製和粘貼 – ETorre 2014-10-01 13:00:53

+0

這不是一個答案,而且很主觀。我喜歡他的格式比你的格式更好,因爲它更容易閱讀。 – Tsasken 2014-10-01 13:03:53

+0

這意味着你的屏幕太小,或者你的視覺半徑有限,很遺憾聽到這個消息,買一個新的屏幕或一雙新的眼睛。 ^^ – Anonymous 2014-10-01 13:05:35