Код Entity framework сначала создает столбец " дискриминатор
Я использую подход EF CF для веб-сайта с MySQL. По какой-то причине EF создает столбец в моей таблице Post под названием "дискриминатор" и содержит VARCHAR "Post".
Почему создается этот столбец? Могу ли я сделать что-то, чтобы избежать его создания? Есть ли какие-либо преимущества наличия этой колонки?
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 { }