EF Core: разбиение сущностей DbContext на несколько таблиц - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь использовать EntityFramework Core для хранения сущностей, которые имеют одинаковую модель, но имеют различное происхождение.У меня есть ProductType перечисление, обозначающее тип сущности.

public enum ProductType
{
  Digital,
  Furniture,
  Health,
}

public class ProductModel
{
  public int Id {get; set;}
  public ProductType Type {get;set;}
  public decimal Price {get; set;}
  public int Stock {get;set;}
}

Я использую производное DbContext для взаимодействия с SqlServer Express:

public class ProductDbContext : DbContext
{
  public ProductType ProductType { get; }
  public DbSet<ProductModel> Products { get; }

  public ProductDbContext( ProductType type )
  {
    ProductType = type;
  }

  protected override void OnModelCreating( ModelBuilder modelBuilder )
  {
    var productEntity = modelBuilder.Entity<ProductModel>()
       .ToTable( $"Products-{ProductType}" );
  }
}

Я хочу каждыйProductType должен быть разделен на собственную таблицу, поэтому продукты будут храниться в dbo.Products-Digital, dbo.Products-Furniture и dbo.Products-Health.

. Вышеприведенная реализация работает для одного ProductType, но я начинаюсталкиваются с проблемами, когда я пытаюсь создать таблицу для более чем одного.Запуск следующего (очевидно) вызывает проблемы, так как он создаст таблицу только для первого ProductType, поскольку после этого база данных уже создана:

var types = Enum.GetValues( typeof(ProductType) ).Cast<ProductType>();
foreach( var type in types )
{
  var context = new ProductDbContext( type );
  context.Database.EnsureCreated();
}

Я хотел бы добавитьновые значения ProductType со временем и EFCore автоматически создает таблицы для каждой из них, если они еще не существуют.

Итак, как я могу получить EF Core для автоматического обеспечения существования таблицыза каждый ProductType, включая те, которые я добавлю позже?

1 Ответ

0 голосов
/ 08 марта 2019

Это пример модели наследования таблиц по типам, которая в настоящее время не поддерживается EF Core, вам следует рассмотреть возможность перехода к модели таблиц по иерархии, которая поддерживается и может быть настроена с помощью Fluent API.

https://docs.microsoft.com/en-us/ef/core/modeling/relational/inheritance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...