Эта запись в блоге из группы ADO.NET показывает в примере, как определить сопоставление таблиц и иерархий в Fluent API Entity Framework Code-First. Это (немного упрощенный) пример:
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
не разрешен в качестве столбца дискриминатора.)