4

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不允许将类型作为鉴别器列。)

4

1 回答 1

3

EF 团队在此确认,目前不支持更改 TPH 中鉴别器列的类型。这是他们正在研究的东西,看看他们是否可以在 RTM 之前启用它。

也就是说,我在本文中展示了如何将列类型更改为 int,但就像他们确认 CTP5 中的所有类型都没有完全支持一样。

于 2011-02-19T22:39:39.853 回答