ADO.NET团队的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
显然是数据库表中的"pure" discriminator列,它在模型类中没有相关属性 . 那很好,我想要的 .
如果我为此映射创建数据库表,则 Type
列在SQL Server中具有 nvarchar(MAX)
类型 .
有没有办法在Fluent API中配置鉴别器列的类型?
例如:我有一个带有可能值 "A", "B" or "C"
的鉴别器列 Type
来区分我的派生模型类 . 如何配置SQL Server中的列具有 varchar(1)
类型?
(我试图通过设置例如 m => m.Requires("Type").HasValue('A')
来简单地使用字符值(注意单引号) . 但是这会抛出一个异常,告诉我 char
类型不允许作为鉴别器列 . )
1 回答
目前不支持更改TPH中鉴别器列类型的EF团队confirms here . 他们正在研究这个问题,看看他们是否可以在RTM之前启用它 .
也就是说,我展示了如何在this article中将列类型更改为int,但是他们确认这对于CTP5的所有类型都不完全支持 .