实体框架与来自不同数据库的相同表名冲突

时间:2012-09-26 10:31:55

标签: c# entity-framework

我在Visual Studio 2012(C#)中使用了Entity Framework 4和MVC 3.

我首先使用数据库;有两个独立的数据库,每个数据库都有自己的命名空间和两个独立的edmx文件。每个数据库都有一个具有相同名称和字段(但内容不同)的表。当我添加第二个表时,我开始遇到编译错误。

Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' 
and 'Interface.CodeFormStatus.FormStatusCodeID' 

似乎有一些复杂的解决方法,或者我可以重命名其中一个表。是否有一个直截了当的解决方案,因为这必须是一个相当普遍的问题。

3 个答案:

答案 0 :(得分:6)

我遇到了一个情况,我有两个数据库(一个是另一个的旧版本),我需要将它们集成到一个项目中。当然,几乎每个名字都有冲突。

我为每个数据库创建了两个独立的edmx文件,为了清楚起见,将每个文件放在自己的命名空间中。然后,我编辑了每个实体名称,以反映它来自哪个数据库 - (例如"活动",两者都成了" v13活动"和" v14活动")

对于要在两个数据库之间进行镜像的操作,我编写了一个包含两个上下文的包装器。这使我的代码重复性降低,同步问题也减少了。

希望这种方法可以帮助其他人 - 这似乎是一个模糊的问题,而且这个答案是谷歌的最佳结果之一!

更新:在EF 6.1+中,还有另一种解决方案。你可以有'#34;冲突"名称,并在使用"Code First From Database" option时使用简单的命名空间将它们分开。我会提倡这个解决方案,就像旧的XML .edmx样式is going to be phased out starting in EF Core

答案 1 :(得分:3)

This worked for me.只需点击设计器中的表格(图形版本而不是代码)然后在"名称"旁边的属性中点击。属性您可以将名称更改为不同的名称。这只会更改设计器中的名称,并在整个应用程序中将其用作别名。

答案 2 :(得分:1)

如果您没有多个具有相同名称的表,则可以在设计器(您的.edmx文件)中编辑实体名称。 因此,只需双击其中一个CodeFormStatus实体的名称并使其不同(例如,将其更改为CodeFormStatusOther