2012-02-07 60 views
5

我正在寻找解决方案,并且可能很多人都必须面对这个问题。在多个edmx文件(实体框架4.0)之间共享模型

我很抱歉我正在研究一个包含近400个表格的应用程序。 应用程序由七个类库项目(StudentInfo,库,费用等)组成,每个项目都有自己的代码生成策略=默认的.edmx文件(包含50个表格)和 引用类库项目的单个Web应用程序项目。
大约有15个表格,这些表格很常见,并将出现在每个类库项目中的.edmx文件中。所有.edmx文件中的类/模型的命名空间都是相同的(Campus)。

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

但是会引发下面的编译时错误 'D:\ Project \ Campus \ CampusStudent \'和'D:\ Project \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll'

其他成员建议的解决方案
1)为每个.edmx文件分别命名空间。
2)对模型使用不同的名称,即StudentSchool,LibrarySchool等
这两个解决方案都会迫使我在每个类库项目中使用它的方法来复制公共类。 任何人都可以帮助我吗?

+0

我想问题是否真的需要所有edmx文件中存在的15个表。难道你不能按逻辑分割模型以消除冗余? – 2012-05-15 18:16:13

回答

6

如果您正在使用POCO T4模板来生成当前实体,可能会有一种方法。 EF中的POCO可以是任何名称空间中的任何类,它们与您的EDMX中的实体具有相同的名称,并且具有与EDMX中的实体相同名称的所有属性(包括获取者和设置者的相同类型和可访问性)。

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

另一种选择是手动创建和维护所有这400个类和EF上下文类型。如果您仅使用代码映射(又称代码优先)并且您不会遇到这些问题,那么这就是您将要执行的操作。

+0

感谢您的回复。我会尽力实施它。 – 2012-02-07 08:59:49

+0

尊敬的Ladislav,您是否有示例应用程序或链接到可以帮助我实现它的资源。其实我无法应用你的建议来创建POCO T4模板**,它不会为这些共享实体创建新的类文件,而是使用引用程序集**中的类,因为我不是非常精通EF – 2012-02-08 07:17:57

+0

对不起,我没有一个例子。您只需创建不能创建的实体名称的静态硬编码集合。该集合将直接在模板中定义。在为实体生成代码的模板部分中,验证实体名称在集合中不存在。您还需要修改用于在其他实体中生成导航属性的代码,以使用引用程序集中的正确类型。 – 2012-02-08 07:52:13