5

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

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

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

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

4

3 回答 3

7

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

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

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

希望这种方法对其他人有所帮助 - 这似乎是一个晦涩难懂的问题,而这个答案是 Google 上的最佳结果之一!

更新:在 EF 6.1+ 中,还有另一种解决方案。您可以有“冲突”的名称,并在使用“数据库中的代码优先”选项时用简单的命名空间将它们分开。我会提倡这种解决方案,因为旧的 XML .edmx 样式将从 EF Core 开始逐步淘汰

于 2014-12-23T21:14:32.930 回答
7

This worked for me. Just click on the table in the designer (the graphical version not the code) Then in the properties next to the, "Name" attribute you can change the name to something different. This will just change the name within the designer and used more as an alias throughout the application.

于 2018-04-25T14:59:42.030 回答
2

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

于 2012-09-26T11:02:04.507 回答