Код структуры сущности сначала создает столбец «дискриминатора» - PullRequest
65 голосов
/ 13 сентября 2011

Я использую подход EF CF для веб-сайта с MySQL.По какой-то причине EF создает столбец в моей таблице сообщений с именем «Дискриминатор» и содержит VARCHAR «Сообщение».

Почему создается этот столбец?Могу ли я сделать что-нибудь, чтобы избежать его создания?Есть ли какие-либо преимущества наличия этого столбца?

Ответы [ 2 ]

108 голосов
/ 13 сентября 2011

Столбец Discriminator используется и требуется в Таблица для иерархии сценариев наследования.Если, например, у вас есть модель, подобная этой ...

public abstract class BaseEntity
{
    public int Id { get; set; }
    //...
}

public class Post : BaseEntity
{
    //...
}

public class OtherEntity : BaseEntity
{
    //...
}

... и сделайте BaseEntity частью модели, например, добавив DbSet<BaseEntity> в производный контекст, Entity Frameworkпо умолчанию отобразит эту иерархию классов в одну таблицу, но введет специальный столбец - Discriminator - для различения различных типов (Post или OtherEntity), хранящихся в этой таблице.Этот столбец заполняется именем типа (снова Post или OtherEntity).

5 голосов
/ 23 апреля 2018

Вы можете остановить создание столбца, добавив аннотацию данных [NotMapped] к моделям, которые наследуются от вашего базового класса. Это скажет EF не добавлять ваш класс в будущие миграции, удаляя столбец дискриминатора.

public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass 
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...