Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架与来自不同数据库的相同表名冲突_C#_Entity Framework - Fatal编程技术网

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

C# 实体框架与来自不同数据库的相同表名冲突,c#,entity-framework,C#,Entity Framework,我正在Visual Studio 2012(C#)中使用实体框架4和MVC 3 我首先使用数据库;有两个单独的数据库,每个数据库都有自己的名称空间和两个单独的edmx文件。每个数据库都有一个具有相同名称和字段(但内容不同)的表。当我添加第二个表时,我开始出现编译错误 Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' and 'Interface.CodeFormStatus.FormStatusCodeID' 似乎有

我正在Visual Studio 2012(C#)中使用实体框架4和MVC 3

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

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)