2013-05-16 111 views
2

我不確定這是否可能在EF中,但我創建了一堆類,並試圖讓EF爲我創建表。EF繼承和主鍵

現在EF創建我的表格很好,除了一個小問題。它創建的表爲:

人 - PERSONID(PK)

美孚 - PERSONID(PK) - FooId(INT)

浦 - PERSONID(PK) - PooId (INT)

理想情況下,我希望表Foo和Poo中的PersonId不是作爲主鍵的外鍵。這可能嗎?

modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo"); 

public class Person 
{ 
    public int PersonId { get; private set; } 
} 

public class Foo : Person 
{ 
    public int FooId { get; private set; } 
} 

public class Poo : Person 
{ 
    public int PooId { get; private set; } 
} 

回答

2

您已經實現了傳承的方式如下每種類型的方針表,其中的基類的PK是派生類的PK,也一個FK回:使用模型構建器試圖通過這樣做到基類。

你想PersonId in tables Foo and Poo to be a foreign key not as the primary key,所以通過改變你的配置,從

modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo"); 

modelBuilder.Entity<Foo>().ToTable("Foo"); 

你的數據庫應該是這樣的:

人 - PERSONID(PK )

富 - PERSONID(PK,FK)

浦 - PERSONID(PK,FK)

More reading on table per type inheritance

+0

是否有可能讓PersonI成爲FK而Foo表中的FooId是PK? –

+0

是的,這是可能的。但在這種情況下,您應該手動創建數據庫,並首先使用代碼將實體映射到現有數據庫。 –

+0

我不完全確定你想要做什麼可以先用代碼完成,而@ KirillBestemyanov的答案證實了這一點。看看Ladislav解釋如何使用設計器映射TPT的鏈接http://stackoverflow.com/questions/5439273/how-to-map-table-per-type-tpt-inheritance-in-entity-designer/5443033# 5443033 – MattSull