c# - 在不同的程序集上分布 Entity Framework 模型

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

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

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

Entity Framework 6 可以做到这一点吗?

谢谢。

最佳答案

您可以通过反射在每个装配体中搜索您的模型。

遍历 AppDomain 的程序集并搜索属性、接口(interface)或基类,请参见下面的示例。

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

关于c# - 在不同的程序集上分布 Entity Framework 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900372/

相关文章:

c# - NHIbernate <any> 映射问题

c# - 加载资源字典时发生错误

c# - 对完全依赖于第三方应用程序的服务进行单元测试

c# - int test[] = new int[0] 是什么意思?

sql-server - 如何将 MS SQL 数据类型 numeric(19, 0) 映射到 .NET 类型

c# - 遍历通过域模型上的 linq 查询返回的对象的属性和值

c# - 从数组填充列表

c# - 如何将对象序列化为xml?

c# - 如何使用 XmlDocument 将多个命名空间添加到根元素?

c# - 如何显示外键的 Entity Framework 值