问题描述
是否有人知道将从 IEntityTypeConfiguration<>
派生的所有类应用于 DbContext $ c的方式或实现$ c>在运行时?
似乎没有内置任何东西,可以通过以下方式手动加载每个人:
受保护的覆盖无效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派生的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!