在不同的程序集上分发实体框架模型

Ben*_*dEg 4 .net c# entity-framework model entity-framework-6

目前我正在尝试使用实体框架6.3和一种分布式模型.我的问题是,我想在不同的程序集中分离模型(例如核心应用程序和插件).

现在我正在寻找一种方法,我的应用程序可以通过反射或类似的东西获得所有模型,并在启动之前在ef db上下文中注册所有模型.

这可能与实体框架6有关吗?

谢谢.

bat*_*che 5

您可以在反射中搜索每个装配中的模型.

迭代AppDomain的程序集并搜索属性,接口或基类,请参阅下面的示例.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");

    foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
    {
      var entityTypes = assembly
        .GetTypes()
        .Where(t =>
          t.GetCustomAttributes(typeof(PersistentAttribute), inherit: true)
          .Any());

      foreach (var type in entityTypes)
      {
        entityMethod.MakeGenericMethod(type)
          .Invoke(modelBuilder, new object[] { });
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以调用DbContext.Set <T>与使用DbSet具有相同的效果 (3认同)