gpt4 book ai didi

c# - 在 EF Core 中应用所有 IEntityTypeConfiguration 派生类

转载 作者:太空狗 更新时间:2023-10-30 00:17:58 24 4
gpt4 key购买 nike

有没有人知道一种方法或有一个实现来应用从 IEntityTypeConfiguration<> 派生的所有类到 DbContext在运行时?

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

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

对于具有许多表的数据库来说将证明相当乏味。

最佳答案

对于 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 中应用所有 IEntityTypeConfiguration 派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47654500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com