【问题标题】:Share a model between multiple edmx files (Entity Framework 4.0)在多个 edmx 文件之间共享模型 (Entity Framework 4.0)
【发布时间】:2012-02-07 16:15:25
【问题描述】:

我正在寻找我所面临的问题的解决方案,可能很多人都必须面对。

目前我正在开发一个包含近 400 个表的应用程序。 应用程序由七个类库项目(StudentInfo、library、Fees 等)组成,每个项目都有自己的 .edmx 文件(包含 50 个表),代码生成策略=default 和 引用类库项目的单个 Web 应用程序项目。
在每个类库项目的 .edmx 文件中,共有大约 15 个表。所有 .edmx 文件中的类/模型的命名空间都是相同的(Campus)。

我创建了一个部分类,即 School(它是常用表/模型之一),其中包含一些方法。

但是会抛出以下编译时错误 'D:\Project\Campus\CampusStudent\' 和 'D:\Project\Campus\CampusLibrary\bin\Debug\CampusLibrary.dll' 中都存在“Campus.School”类型

其他成员提出的解决方案
1) 每个 .edmx 文件都有单独的命名空间。
2)对模型使用不同的名称,即 StudentSchool、LibrarySchool 等。
这两种解决方案都将迫使我在每个类库项目中复制公共类及其方法。 有人可以帮帮我吗?

【问题讨论】:

  • 我想问题是你是否真的需要所有 edmx 文件中存在的那 15 个表。您不能在逻辑上拆分模型以消除冗余吗?

标签: entity-framework-4


【解决方案1】:

如果您正在使用 POCO T4 模板进行当前实体生成,则可能有一种方法。 EF 中的 POCO 可以是任何命名空间中的任何类,它们与 EDMX 中的实体同名,并且所有属性与 EDMX 中的实体同名(包括相同的类型和 getter 和 setter 的可访问性)。

在另一个程序集中定义您的 15 个共享类(您必须遵循那些提到的 POCO 规则)并在所有库项目中引用它。拥有此程序集后,创建您自己的 POCO T4 模板版本,该模板不会为这些共享实体创建新的类文件,而是使用引用程序集中的类。

另一个选项是手动创建和维护所有这 400 个类和 EF 上下文类型。如果您使用仅代码映射(也称为代码优先),那么您将这样做,并且您不会遇到这些问题。

【讨论】:

  • 感谢您的回复。我会尝试实现它。
  • 亲爱的 Ladislav,您是否有示例应用程序或资源链接可以帮助我实现它。实际上,我无法将您的建议应用于创建 POCO T4 模板它不会为那些共享实体创建新的类文件,而是使用引用程序集中的类,因为我对 EF 不是很精通
  • 对不起,我没有例子。您只需要创建不能创建的实体名称的静态硬编码集合。该集合将直接在模板中定义。在为实体生成代码的模板部分中,验证集合中不存在实体名称。您还需要修改用于在其他实体中生成导航属性的代码,以使用引用程序集中的正确类型。
  • 亲爱的 ladislav,我决定将所有 Classlibrary 项目合并为一个,其中包含来自各个 classlibraries 的多个 edmx 文件。我使用了 ADO.Net POCO 实体生成器并编辑了模板,该模板将阻止为其他 .edmx 上下文生成通用实体的属性。我将所有类库合并为一个的主要原因是部分类不能跨越程序集。无论如何谢谢你的帮助。
  • 如果你想要共享类,你当然不能通过跨其他程序集的部分部件来定义它们的附加部件。必须在共享程序集中定义具有所有属性和方法的整个类。
猜你喜欢
  • 2015-07-30
  • 2015-12-21
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2012-01-22
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多