This blog post在一个示例中显示了如何在Entity Framework Code-First的Fluent API中定义Table-Per-Hierarchy Mapping。这是(略微简化)的例子:
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
类型作为鉴别器列。)
答案 0 :(得分:3)
目前不支持在TPH中更改鉴别器列类型的EF团队confirms here。他们正在研究这个问题,看看他们是否可以在RTM之前启用它。
也就是说,我展示了如何在this article中将列类型更改为int,但是他们确认这对于CTP5的所有类型都不完全支持。