代码之家  ›  专栏  ›  技术社区  ›  TanvirArjel

EF Core中的modelBuilder.Configurations.AddFromAssembly

  •  5
  • TanvirArjel  · 技术社区  · 7 年前

    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 在里面

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  5
  •   TanvirArjel    7 年前

    对于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中,您不需要编写任何自定义扩展方法。增加EF核心2.2 ApplyConfigurationsFromAssembly 为此目的的扩展方法。您可以如下使用它:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
       base.OnModelCreating(modelBuilder);
    
       modelBuilder.ApplyConfigurationsFromAssembly(typeof(UserConfiguration).Assembly); // Here UseConfiguration is any IEntityTypeConfiguration
    }
    

    谢谢您。

    推荐文章