C# 实体框架与来自不同数据库的相同表名冲突
我正在Visual Studio 2012(C#)中使用实体框架4和MVC 3 我首先使用数据库;有两个单独的数据库,每个数据库都有自己的名称空间和两个单独的edmx文件。每个数据库都有一个具有相同名称和字段(但内容不同)的表。当我添加第二个表时,我开始出现编译错误C# 实体框架与来自不同数据库的相同表名冲突,c#,entity-framework,C#,Entity Framework,我正在Visual Studio 2012(C#)中使用实体框架4和MVC 3 我首先使用数据库;有两个单独的数据库,每个数据库都有自己的名称空间和两个单独的edmx文件。每个数据库都有一个具有相同名称和字段(但内容不同)的表。当我添加第二个表时,我开始出现编译错误 Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' and 'Interface.CodeFormStatus.FormStatusCodeID' 似乎有
Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID'
and 'Interface.CodeFormStatus.FormStatusCodeID'
似乎有一些复杂的解决方法,或者我可以重命名其中一个表。没有一个简单的解决方案,因为这一定是一个相当常见的问题。如果没有许多表具有相同的名称,则可以在designer(您的
.edmx
文件)中编辑实体名称。
因此,只需双击您的
CodeFormStatus
实体之一的名称并使其不同(例如,将其更改为CodeFormStatusOther
)我遇到了一种情况,即我有两个数据库(一个是另一个的旧版本),我需要将它们集成到一个项目中。自然,几乎每个名字都有冲突
我为每个数据库创建了两个独立的edmx文件,为了清晰起见,我将每个文件放在自己的名称空间中。然后,我编辑了每个实体名称,以反映它来自哪个数据库(例如,两者中的“活动”变成了“v13Activities”和“v14Activities”)
对于要在两个数据库之间镜像的操作,我编写了一个包含两个上下文的包装器。这使得我的代码的重复性大大降低,同步问题也减少了
希望这种方法能帮助其他人-这似乎是一个模糊的问题,这个答案是谷歌上最热门的结果之一
更新:在EF 6.1+中,还有另一个解决方案。您可以使用“冲突”名称,并在使用时使用简单的名称空间将它们分隔开。我主张继续使用这种解决方案,因为它是旧的XML.edmx样式。只需单击设计器中的表(图形版本而不是代码),然后在“Name”属性旁边的属性中,您可以将名称更改为其他名称。这只会更改设计器中的名称,并在整个应用程序中更多地用作别名 “你的第二个链接已经死了。”丹尼卡伦·韦尔普,真糟糕。我似乎在其他任何地方都找不到这篇文章,除了在一个复制/粘贴其他人博客的博客上。我会更新链接并联系Rowan Miller(这篇文章的原始作者),看看他是否能把原始的备份。@CoreyLarson EF 7被重命名为EF Core。@Cameron-谢谢你-我现在不想经常去C#land,我在EF上有点脱离了循环。您还需要在不同的文件夹中至少有一个edmx文件,否则公共表.cs文件将被覆盖(通过上次创建的edmx)