Entity Framework CTP5: первый код: как указать тип столбца дискриминатора в отображении таблицы на иерархию? - PullRequest
4 голосов
/ 19 февраля 2011

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

1 Ответ

3 голосов
/ 20 февраля 2011

Команда EF подтверждает здесь , что изменение типа столбца дискриминатора в TPH в настоящее время не поддерживается.Это то, что они изучают, чтобы увидеть, смогут ли они включить его до окончательной первоначальной версии.

Тем не менее, я показал, как изменить тип столбца на int в этой статье , но, как они подтверждают, это поддерживается не полностью для всех типов, начиная с CTP5.

...