我正在寻找解决问题的方法,可能很多人必须面对。
我正在研究一个包含近400个表的应用程序。
应用程序包含七个类库项目(StudentInfo,库,费用等),每个项目都有自己的 .edmx 文件(包含50个表),代码生成策略=默认和
一个引用类库项目的Web应用程序项目。
大约有15个表是常见的,它们将出现在每个类库项目的 .edmx 文件中。所有.edmx文件中的类/模型的命名空间都是相同的(Campus)。
我创建了一个部分类,即School(它是一个通用表/模型),它包含一些方法。
但是抛出以下编译时错误 类型'Campus.School'存在于'D:\ Project \ Campus \ CampusStudent \'和'D:\ Project \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll'
其他成员提出的解决方案
1)为每个.edmx文件分别设置名称空间
2)对模型使用不同的名称,即StudentSchool,LibrarySchool等
这两种解决方案都会迫使我在每个类库项目中使用其方法复制公共类。
有人能帮助我吗?
答案 0 :(得分:6)
如果您使用POCO T4模板进行当前实体生成,可以有一种方法。 EF中的POCO可以是任何名称空间中的任何类,它们与EDMX中的实体同名,并且具有与EDMX中的实体同名的所有属性(包括getter和setter的相同类型和可访问性)。
在另一个程序集中定义15个共享类(必须遵循那些提到的POCO规则)并由所有库项目引用它。一旦你有这个程序集创建自己的POCO T4模板版本,它不会为这些共享实体创建新的类文件,而是使用引用程序集中的类。
另一个选项是手动创建和维护所有这400个类和EF上下文类型。如果您使用仅代码映射(也称为代码优先),那么您将会执行此操作,并且您将不会遇到这些问题。