ADO.NET 团队的这篇博文以示例的形式展示了如何在 Entity Framework Code-First 的 Fluent API 中定义 Table-Per-Hierarchy 映射。这是(稍微简化的)示例:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
// more properties
}
public class DiscontinuedProduct : Product
{
public DateTime DiscontinuedDate { get; set; }
}
...和TPH映射:
modelBuilder.Entity<Product>()
.Map<Product>(m => m.Requires("Type").HasValue("Current"))
.Map<DiscontinuedProduct>(m => m.Requires("Type").HasValue("Old"));
Type
这里显然是数据库表中的一个“纯”鉴别器列,它在模型类中没有相关属性。这很好,我想要什么。
如果我让为此映射创建数据库表,则该列Type
在 SQL Server 中的类型为nvarchar(MAX)
.
有没有办法在 Fluent API 中配置鉴别器列的类型?
例如:我有一个Type
带有可能值的鉴别器列"A", "B" or "C"
来区分我的派生模型类。如何配置 SQL Server 中的列具有类型varchar(1)
?
(我试图通过设置例如简单地使用字符值m => m.Requires("Type").HasValue('A')
(注意单引号)。但这会引发一个异常,告诉我char
不允许将类型作为鉴别器列。)