本文介绍了在EF Core中应用所有IEntityTypeConfiguration派生的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有人知道将从 IEntityTypeConfiguration<> 派生的所有类应用于 DbContext 在运行时?



似乎没有内置任何东西,可以通过以下方式手动加载每个人:

 受保护的覆盖无效OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new Table1Config())
modelBuilder.ApplyConfiguration(new Table2Config() )
...
modelBuilder.ApplyConfiguration(new TableNConfig())
}


$ b对于具有很多表的数据库,$ b

将会变得相当乏味。

解决方案

对于EF Core< = 2.1



您可以编写如下扩展方法:

 公共静态class ModelBuilderExtensions 
{
public static void ApplyAllConfigurations(this ModelBuilder modelBuilder)
{
var typesToRegister = Assembly.GetExecutingAssembly()。GetTypes()。其中​​(t => t.GetInterfaces()
.Any(gi => gi.IsGenericType& gi.GetGenericTypeDefinition()== typeof(IEntityTypeConfiguration<>)))。ToList();

foreach(typesToRegister中的变量类型)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.ApplyConfiguration(configurationInstance);
}
}
}

然后在 OnModelCreating 如下:

 受保护的覆盖无效OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.ApplyAllConfigurations();
}



对于EF Core> = 2.2



EF Core 2.2 中,您不需要编写任何自定义扩展方法。 EF Core 2.2 为此目的添加了 ApplyConfigurationsFromAssembly 扩展方法。您可以按如下所示使用它:

 受保护的覆盖无效OnModelCreating(ModelBuilder modelBuilder)
{
base .OnModelCreating(modelBuilder);

modelBuilder.ApplyConfigurationsFromAssembly(typeof(UserConfiguration).Assembly); //这里的UseConfiguration是任何IEntityTypeConfiguration
}

谢谢。

Does anyone know of a way or have an implementation to apply ALL classes that derive from IEntityTypeConfiguration<> to the DbContext at runtime?

There doesn't seem to be anything built in and loading each one manually via:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ApplyConfiguration(new Table1Config())
    modelBuilder.ApplyConfiguration(new Table2Config())
    ...
    modelBuilder.ApplyConfiguration(new TableNConfig())
}

is going to prove rather tedious for a database with many tables.

解决方案

For EF Core <= 2.1

You can write an extension method as follows:

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);
        }
    }
}

Then in the OnModelCreating as follows:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
   base.OnModelCreating(modelBuilder);

   modelBuilder.ApplyAllConfigurations();
}

For EF Core >= 2.2

From EF Core 2.2 you don't need to write any custom extension method. EF Core 2.2 added ApplyConfigurationsFromAssembly extension method for this purpose. You can just use it as follows:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
   base.OnModelCreating(modelBuilder);

   modelBuilder.ApplyConfigurationsFromAssembly(typeof(UserConfiguration).Assembly); // Here UseConfiguration is any IEntityTypeConfiguration
}

Thank you.

这篇关于在EF Core中应用所有IEntityTypeConfiguration派生的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 02:53