c# - EF Core 中的 modelBuilder.Configurations.AddFromAssembly

标签 c# asp.net-core entity-framework-core ef-core-2.1

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 的东西。

最佳答案

对于 EF 核心 <= 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 核心 >= 2.2

从 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
}

谢谢。

关于c# - EF Core 中的 modelBuilder.Configurations.AddFromAssembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51842709/

相关文章:

c# - 聚合根中的 NHibernate 和拦截器

c# - 虚拟化统一网格

C# 大字节数组和内存泄漏(如果不快速清空)

sql-server - 我应该如何为现有数据库表定义复合主键?

c# - 如何在 EF Core 中连接多个表中仅包含某些列的数据集?

c# - 如何保护连接字符串

angular - 部署 angular 8 和 asp.net core 3.1 的步骤

c# - ASP.NET Core 2 - 多个 Azure Redis 缓存服务 DI

mysql - 如何在 MySQL 中使用 Fluent Migrator 自动生成 UUID/GUID?

asp.net-core - 如何将 IdentityUser 扩展为 ASP.NET Core/MVC 6/EF7 中的声明?