Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Столбец Discriminator используется и требуется в сценариях Таблица на Per-Hierarchy наследования. Если у вас например есть такая модель...

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

Ответ 2

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

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