Как в EF Core сделать modelBuilder.Configurations.AddFromAssembly

259
04 февраля 2020, 20:50

Внимание! Это перевод вопроса 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?

Answer 1

Для EF Core <= 2.1

Напишите метод расширения:

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

Начиная с EF Core 2.2 вам уже не нужно писать собственный метод расширения, так как был добавлен метод ApplyConfigurationsFromAssembly:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
   base.OnModelCreating(modelBuilder);
   modelBuilder.ApplyConfigurationsFromAssembly(typeof(UserConfiguration).Assembly); // Here UseConfiguration is any IEntityTypeConfiguration
}
READ ALSO
Открытые миры на основе звезд

Открытые миры на основе звезд

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

273
Могу ли я передать значение сразу нескольким объектам?

Могу ли я передать значение сразу нескольким объектам?

Мне нужно сделать остановку объектов при касанииПри касание значение int = -1

217
Дублирование записей в MS SQL Server

Дублирование записей в MS SQL Server

У меня имеется 2 класса сущностей, первый класс:

238
non-nullable reference types и default(T)

non-nullable reference types и default(T)

вот такой метод

245