Как создать дополнительную таблицу для объекта с унаследованными полями из абстрактного класса - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу, чтобы для каждой сущности было создано 2 таблицы: одна с исходными свойствами, а другая с теми же полями и таблицы, унаследованные от абстрактного класса.

Например:

Класс сущности (Продукт):

  • Описание
  • Категория
  • Акция

Абстрактный класс:

  • Обновлено:
  • Обновлено:

Ожидаемый результат будет:

Таблица продуктов:

  • Описание
  • Категория
  • Фондовая

Таблица Products_Abstract:

  • Описание
  • Категория
  • Фондовая
  • ОбновленоBy
  • ОбновленоAt

Чего я пытаюсь избежать, так это созданиякласс, наследующий абстрактный объект, потому что я не буду использовать его в проекте.Мне нужно только создание таблицы, работающей с миграциями, поэтому, если я обновлю Product в будущем и добавлю новую миграцию, обе таблицы должны претерпеть изменения.

Я думаю, что-то вроде этого - то, что я ищудля:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>()
        .Map(m => m.ToTable("Products"))
        .Map<AbstractClass>(m =>
        {
            m.MapInheritedProperties();
            m.ToTable("Products_Abstract");
        });
}

Но этот код для EF6, и я использую EF Core без возможности его изменить.

Заранее спасибо.Надеюсь, английский не мой основной язык.

1 Ответ

0 голосов
/ 05 апреля 2019

Для создания таблицы с двумя моделями, вы можете попробовать, как показано ниже:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    public DbSet<Product> Product { get; set; }       

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        foreach (var property in typeof(Product).GetProperties())
        {
            builder.Entity<Products_Abstract>()
                   .Property(property.PropertyType, property.Name);
        }
    }
}

Обновление:

public class Abstract
{
    public string UpdatedBy { get; set; }
    public string UpdatedAt { get; set; }
}

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    foreach (var property in typeof(Product).GetProperties())
    {
        builder.Entity<Abstract>()
                .ToTable("Products_Abstract")
                .Property(property.PropertyType, property.Name);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...