【问题标题】:Distribute entity framework models over different assemblies将实体框架模型分布在不同的程序集上
【发布时间】:2015-06-17 19:12:30
【问题描述】:

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

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

实体框架 6 可以做到这一点吗?

谢谢。

【问题讨论】:

  • 你应该考虑为每个模块创建一个dbcontext,并在你需要的地方使用它。

标签: c# .net entity-framework model entity-framework-6


【解决方案1】:

您可以通过反射在每个程序集中搜索您的模型。

遍历 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[] { });
      }
    }
}

【讨论】:

  • 这个看起来不错,我马上试试,太棒了!
  • 还有一个问题,如果我动态加载模型,如何使用 DbSet,因为我没有注册集合,它代表数据库中的表。
  • 可以调用 DbContext.Set 和使用 DbSet 效果一样
  • 谢谢,这似乎是完美的解决方案。
  • 我知道它有点老了,但我也面临着同样的需求,你能就你的工作方式提供一些反馈吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多