0

我試圖創建兩個實體之間需要兩端的1對1關係。他們是基本的實體,這樣與EF代碼優先的一對一關係 - 外鍵不正確

public class EntityA 
{ 
    public int? EntityAID {get; set;} 
    public virtual EntityB EntityB {get; set; 
} 

public class EntityB 
{ 
    public int? EntityBID {get; set;} 
    public virtual EntityA EntityA {get; set; 
} 

我有EntityA的EntityTypeConfiguration對象,我用它來配置關係。我希望entityA成爲關係中的主體,如果我正確理解此過程,則意味着EntityB將在其數據庫表中具有EntityA的外鍵。這是我的配置聲明

HasRequired(e=>e.EntityB).WithRequiredPrincipal(e=>e.EntityA); 

我正在使用Code First Migration更新我的數據庫。當我生成將設置此關係的遷移時,遷移正確地標識了爲EntityB放置外鍵所需的事實,但它正在爲EntityA創建EntityA的主鍵的外鍵,像這樣:

.ForeignKey("dbo.TableForEntityB", t => t.EntityBID) 

它應該使用EntityA的ID作爲外鍵。

有沒有人看到我在做什麼錯了?我很難過。我嘗試過使用WithRequiredDependent,並且所有這些都是在TableForEntityA上創建一個相同的情況。

謝謝。

+0

你不可能需要兩端,這甚至不是EF限制,它是一個數據庫限制。其中一個實體總是必須是父實體(即先插入)。基於此,也許你可以更新你的問題,並得到答案。 – SOfanatic

回答

0

這源於我對EF實施的一對一關係的誤解。我讀了一遍,發現EF在創建一對一的relatoinships時使用了共享的主鍵關係。因此,我改變EntityB看起來像這樣:

public class EntityB 
{ 
    public int? EntityAID {get; set;} 
    public virtual EntityA EntityA {get; set; 
} 

然後配置這樣的關係:

HasRequired(C => c.EntityA).WithRequiredDependent(p值=> p.EntityB);

當配置EntityB時。

0

我在這裏做猜測工作,但我認爲創建的外鍵不在EntityB表的主鍵上。 EntityBIDEntityB類中不是EntityB的主鍵,顯然是因爲您將它指定爲Nullable類型,所以它是什麼?