多个EF6数据库模型具有相同的实体名称冲突并被覆盖,如何在EF6中设置模型输出目录?
多个EF6数据库模型具有相同的实体名称冲突并被覆盖,如何在EF6中设置模型输出目录?
我正在使用EF6
从多个数据库中生成模型(数据库优先)。一些数据库具有相同的表名,因此在生成模型时它们会发生冲突。为了解决命名空间
问题,我进入了解决方案资源管理器中的Model.tt
文件属性,并更改了Custom Tool Namespace
。然而,这只解决了部分问题,因为当生成额外的模型时,重复的(相同表名)
.cs
文件仍然被放置在项目目录中,同名实体被覆盖。\n如何在EF6中设置模型输出目录?或者有其他解决方法吗?\n编辑: 将.edmx
移动到它自己的文件夹后,当在var objectContext = ((IObjectContextAdapter)this.Ecom).ObjectContext;
行访问元数据时,我现在得到{\"Unable to load the specified metadata resource.\"}
。
EF6中出现多个具有相同实体名称的模型冲突并被覆盖的问题的原因是,EF默认将所有模型输出到同一个目录中,当存在多个模型时,会导致文件名冲突,从而导致被覆盖。
解决这个问题的方法如下:
1. 在项目目录中创建一个物理文件夹。
2. 在Solution Explorer
中将该文件夹包含到项目中。
3. 将模型文件添加到该目录中(可以复制现有的模型文件,也可以尝试生成一个新的模型文件)。
4. 修改.tt
文件的Custom Tool Namespace
,确保每个模型都有独立的命名空间。
5. 检查Web.config
或app.config
文件中的EF连接字符串,确保它们的元数据设置如下所示:res:///Ecom.Ecom.csdl(而不是res:///Ecom.csdl),其中目录结构使用点.
而不是斜杠/
。
通过以上步骤,可以解决EF6中多个模型名称冲突并被覆盖的问题。