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

Pet*_*ith 4 c# entity-framework

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

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

Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' 
and 'Interface.CodeFormStatus.FormStatusCodeID' 
Run Code Online (Sandbox Code Playgroud)

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

eag*_*i22 7

这对我有用。只需单击设计器中的表格(图形版本不是代码)然后在“名称”属性旁边的属性中,您可以将名称更改为不同的名称。这只会在设计器中更改名称,并在整个应用程序中更多地用作别名。


Cor*_*son 6

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

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

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

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

更新:在EF 6.1+中,还有另一种解决方案.您可以使用"冲突"名称,并在使用"Code First From Database"选项时使用简单的命名空间将它们分开.我将提倡这个解决方案,因为旧的XML .edmx风格将从EF Core开始逐步淘汰.

  • 您还需要在不同的文件夹中至少有一个 edmx 文件,否则公共表 .cs 文件将被覆盖(由最后创建的 edmx 覆盖) (2认同)