Внимание! Это перевод вопроса modelBuilder.Configurations.AddFromAssembly in EF Core
В EntityFramework 6.x, если у вас было много классов EntityConfiguration то вы могли применить их все одной строчкой в OnModelCreating(ModelBuilder modelBuilder) кодом вида:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.AddFromAssembly(typeof(MyDbContext).Assembly);
}
Есть ли подобное modelBuilder.Configurations.AddFromAssembly в Entity Framework Core?
Напишите метод расширения:
public static class ModelBuilderExtensions
{
public static void ApplyAllConfigurations(this ModelBuilder modelBuilder)
{
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.GetInterfaces()
.Any(gi => gi.IsGenericType && gi.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>))).ToList();
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.ApplyConfiguration(configurationInstance);
}
}
}
Затем используйте в OnModelCreating следующим образом:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyAllConfigurations();
}
Начиная с EF Core 2.2 вам уже не нужно писать собственный метод расширения, так как был добавлен метод ApplyConfigurationsFromAssembly:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(UserConfiguration).Assembly); // Here UseConfiguration is any IEntityTypeConfiguration
}
Продвижение своими сайтами как стратегия роста и независимости