Исправлена ошибка с базой данных Entity Framework 6 для каждой иерархии (TPH)

Вопрос:

Я создал абстрактный класс с некоторыми базовыми свойствами:

public abstract class BaseModel
{
public BaseWishModel()
{
}

[Key]
public int Id { get; set; }

public virtual string Title { get; set; }

public bool IsPublished { get; set; }
public bool IsSpam { get; set; }
}

Мой класс предметов:

public class PrivateItem : BaseModel
{
[NotMapped]
public string PurposesIds { get; set; }
}

Мой метод OnModelCreating:

  modelBuilder.Entity<BaseModel>()
.Map<PrivateItem>(r => r.Requires("Discriminator").HasValue((int)Enums.Type.Private))
.ToTable("Items");

Когда я сохраняю данные, он генерирует следующий sql:

INSERT [dbo].[Items]([Title], [IsPublished], [ShortDescription1], [ShortDescription2], [Discriminator])

Я не знаю, почему он генерирует ShortDescription1 и ShortDescription1

Ответ №1

Поскольку, согласно вашему комментарию, у вас есть другие классы, наследующие от BaseModel, и без какой-либо другой конфигурации от вас EF использует TPH по умолчанию.

В основном это приводит к одной таблице для всех иерархий классов.

Поскольку все классы иерархии сохраняются в одной и той же таблице, когда выполняется вставка для одного класса, все столбцы (иерархии) заполняются. Не используемые столбцами класса заполняются нулевым значением или значением по умолчанию.

Это приведет к ShortDescription1 и ShortDescription2 в ваш запрос на вставку.

Оцените статью
TechArks.Ru
Добавить комментарий