【问题标题】:Entity Framework conflict with same table name from different databases实体框架与来自不同数据库的相同表名冲突
【发布时间】:2012-09-26 10:31:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 你的第二个链接失效了。
    • @DannyCullen Welp,太糟糕了。我似乎在其他任何地方都找不到这篇文章,除了在其中一个复制/粘贴其他人的博客的博客上。我将更新该链接并与 Rowan Miller(该帖子的原作者)联系,看看他是否可以恢复原件。
    • @CoreyLarson EF 7 已重命名为 EF Core。
    • @Cameron - 谢谢你 - 这些天我没有像我想的那样频繁地使用 C# 领域,我在 EF 上有点脱离了循环。
    • 您还需要在不同的文件夹中至少有一个 edmx 文件,否则公用表 .cs 文件将被覆盖(被最后创建的 edmx)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        相关资源
        最近更新 更多