据我了解,Table Per Hierarchy 首先是 asp.net mvc 代码中的默认值(?)。然而,当我创建一个抽象基类和两个空子类时,迁移想要创建两个单独的表,而不是一个带有鉴别器列的表。
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()
{ }
}
我将两个子类添加到 db 上下文中:
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);
}