为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core 中的 modelBuilder.Configurations

EF Core 中的 modelBuilder.Configurations

C#
缥缈止盈 2021-11-28 16:11:16
在 中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 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

对于 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 Core >= 2.2

从 EF Core 2.2 开始,您无需编写任何自定义扩展方法。EF Core 2.2ApplyConfigurationsFromAssembly为此添加了扩展方法。您可以按如下方式使用它:


protected override void OnModelCreating(ModelBuilder modelBuilder)

{

   base.OnModelCreating(modelBuilder);


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

}

谢谢你。


查看完整回答
反对 回复 2021-11-28

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号