據我所知,Table Per Hierarchy是第一個在asp.net mvc代碼中的默認值(?)。然而,當我創建一個抽象基類和兩個空子類時,遷移想要創建兩個單獨的表,而不是一個具有鑑別器列的表。ASP.NET MVC代碼第一個TPH不工作,爲每個子類創建一個表,爲什麼?
public abstract class ShippingBase : Entity
{
public ShippingBase()
{ }
public bool IsDefault { get; set; }
}
public class Shipping : ShippingBase
{
public Shipping():base()
{ }
}
public class FlatRateShipping : ShippingBase
{
public FlatRateShipping():base()
{ }
}
我添加了兩個子類的分貝背景:
public virtual IDbSet<Localization.Shipping> Shippings { get; set; }
public virtual IDbSet<Localization.FlatRateShipping> FlatRateShippings { get; set; }
而且我也不做任何OnModelCreating。
我正在使用ASP.NET Boilerplate,但據我所知它不會更改任何會給出此結果的設置。我知道如何強制TPC,但由於TPH是默認設置,我沒有找到任何設置它的方法。 有什麼辦法可以強制TPH呢?還是我錯過了我的課程?
這是導致遷移:
public override void Up()
{
CreateTable(
"dbo.FlatRateShippings",
c => new
{
Id = c.Int(nullable: false, identity: true),
IsDefault = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.Shippings",
c => new
{
Id = c.Int(nullable: false, identity: true),
IsDefault = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.Id);
}
我現在嘗試使ShippingBase具體,但結果仍然相同。還有其他建議嗎?關於命名,Shipping將代表具有所有屬性的許多不同的運輸方法,而需要額外/不同的運輸方法獲得他們自己的類。 –
現在我明白了。我還必須將ShippingBases添加到數據庫上下文才能使用。謝謝克里斯! :) –