В этом блоге команды 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
не допускается в качестве столбца дискриминатора.)