Код Entity framework сначала создает столбец " дискриминатор


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

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

2 57

2 ответа:

The 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).

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

public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass 
{
}