Я пытаюсь использовать 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
, включая те, которые я добавлю позже?