2017-02-10 50 views
0

我首先使用實體​​框架代碼嘗試創建一個數據庫,我有幾個共享唯一主鍵的表。代碼優先在表之間共享主鍵

我對我的域類具有以下結構,並希望FirstClass,SecondClass,ThirdClass都將創建爲鏈接到存儲共享密鑰的BaseTable的表。我在這個例子中包含了SharedClass類,因爲我的項目中也有這樣的strutcure。

[Table("BaseTable")] 
public abstract class BaseClass { 
    public int Id { get; set; } 
} 

public abstract class SharedClass : BaseClass { 
    public string SharePropertyOne { get; set; } 
    public string SharePropertyOne { get; set; } 
} 

[Table("FirstClass")] 
public abstract class FirstClass : SharedClass { 
    public string SharePropertyOne { get; set; } 
    public string SharePropertyOne { get; set; } 
} 

[Table("SecondClass")] 
public abstract class SecondClass : SharedClass { 
    public string SharePropertyOne { get; set; } 
    public string SharePropertyOne { get; set; } 
} 

[Table("ThirdClass")] 
public abstract class ThirdClass : SharedClass { 
    public string SharePropertyOne { get; set; } 
    public string SharePropertyOne { get; set; } 
} 

什麼正在發生的事情是的Firstclass,二等和三級欄目都被創建,但用自己的主鍵和正在創建無BaseTable。

我不確定如果在查看這裏提出的類似問題的幾個問題後,我是否缺少某些東西。

+0

可以顯示在DbContext中定義的相關DbSets以及流暢配置(如果有的話)。 –

+0

所以我沒有任何上述類作爲上下文中的DbSets,因爲它們都不是聚合路由並且沒有Fluent API配置。 – jjharrison

回答

0

默認情況下,EF繼承未激活,甚至在基類上應用Table數據註釋。

它可以通過添加一個DbSet到派生DbContext激活:

public DbSet<BaseClass> BaseClass { get; set; } 

這也允許您使用多態查詢,或具有流暢的配置 - 所需要的最低限度是:

modelBuilder.Entity<BaseClass>();