【问题标题】:Error 6002: The table/view does not have a primary key defined错误 6002:表/视图没有定义主键
【发布时间】:2014-09-07 15:48:49
【问题描述】:

我遇到了一些这样的错误,它们在视图中非常有意义。我理解它们的意思,但是我正在寻找一种方法来防止该警告消息与模型一起生成。我以为我可以编辑 .edmx XML 以删除错误,但会重新生成警告。我在视图上定义了一个键,尽管它似乎没有帮助。

有什么办法可以消除这些警告?或者是否有某种方式让实体框架意识到这不是一个可编辑的表并且不需要主键?我主要是从项目美学的角度来询问(我不喜欢在我的错误列表中看到警告)。

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    我完全理解你来自哪里。这是我在尝试掌握 EF 时不得不处理的最大烦恼之一,显然,这是一个非常普遍的问题。

    对我有用的解决方案是在设计器模式下打开带有视图的 EDMX,并自己分配一个主键。它是什么并不重要,只要有一个。您右键单击要设置为主键的列并选择Entity Key(这是一个复选框选项)。在此警告决定消失之前,您可能必须退出并重新启动 Visual Studio。

    我希望它也对你有用。但即使是这样,这也是一个短期修复,因为下次您更新视图时,它可能会遇到同样的问题。但只要上述步骤有效,只需几秒钟即可修复。

    另外,这里有一些您可能会觉得有用的链接:

    【讨论】:

    • 你并不完全正确。你不能标记任何你想要的列,因为如果你标记一个没有唯一值的列,你会得到一堆运行时错误,告诉你你有两个具有相同主键/实体键的对象。
    • 所以这对我有用,使用 .edmx 窗口中的右键单击列在我的视图上移动 suggested Primery Key。重新启动并保存,非常感谢。然而,时间会证明这个疯狂的科学家的东西。
    • 这不起作用。我的视图实体上有一个手动定义的主键,位于唯一列(恰好是基础表上的主键)上,但我仍然收到此警告。
    • @Santhos ... 甚至更糟糕的是,如果您将实体用作只读实体,您可以获得实体的副本,因为它们已被缓存在查询内,EF 会看到稍后在同一个查询中弹出“相同的键”,然后欺骗原来的。 /sigh 欢乐时光。
    • @ruffin 这很粗糙(没有双关语的意思)。我从未遇到过这种行为,但这听起来像是一个漫长的夜间调试会话。
    【解决方案2】:

    在我的情况下,这很容易解决,以下是步骤:

    • 清理解决方案
    • 关闭 Visual Studio
    • 打开 Visual Studio
    • 清理并构建解决方案

    在尝试任何事情之前,可以尝试确保您没有在 edmx 中手动更改任何内容。

    我希望这会有所帮助。

    【讨论】:

    • 执行此操作后双击.edmx 文件的尴尬时刻。
    • 不幸的是,逃避 edmx 警告并不能解决或忽略它们。打开 edmx 后,它们仍然存在。我不会称其为解决方案/解决方案。
    【解决方案3】:

    我在 EF4 和 EF5 中使用了 http://www.hilmiaric.com/?p=95 描述的技术,使用 rownumber 作为 ID 很幸运

    SELECT ISNULL((ROW_NUMBER() OVER (ORDER BY XXX ASC)), 0) AS 'ID',

    但我没有 EF5 及更高版本的解决方案。最后一次尝试 6.1.3

    【讨论】:

    • 死链接。当您打开 edmx 时,这不会导致同样的问题吗? row_number 返回一个 bigint,它仍然是一个标量类型,而不是视图上的 PK。因此生成实体会将其标记为实体类型,并在这样做时产生警告。
    • 还要注意,实体是由这个 ID 跟踪的,后续查询将重用实体缓存。我假设如果此视图被查询两次并且数据或数据顺序不一致,您将得到不匹配/不一致的结果。伪造一个独特的身份可能会在以后出现不可预见且难以发现的问题。
    【解决方案4】:

    实体框架有时会令人沮丧。我真的希望微软能够摆脱困境并解决 EF Visual Modeler 的所有问题并从数据库更新模型。我刚刚花了最后半个小时通过手动修改.edmx文件来清理视图中的重复字段,我也再次遇到了错误的构建和这个问题:

     <!--Errors Found During Generation:
      warning 6002: The table/view 'BMP_DBA.BMP_INST_DATA_SEARCH_VIEW' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
     -->
    

    唉,我不得不像往常一样,通过在设计器中右键单击它来手动设置主键,然后重新启动 Visual Studio,然后重新构建应用程序。当我重建时,我仍然在 .edmx 文件中收到警告,但现在构建工作。这只是处理 EF 的细微差别之一。

    【讨论】:

    • 在视图上手动添加主键是解决问题的方法之一,即使不需要主键,正如原始问题所述。
    • 您不需要通过手动编辑 edmx 来清理视图中的重复字段。只需从设计器中删除视图并更新模型并重新添加视图。
    • 请注意,设置实体键不会设置主键。两者不是一回事。视图没有主键。实体有实体键。
    【解决方案5】:

    检查数据库表的主键。也许 ID 列标记为身份但不是主键。

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 2012-12-22
      • 2017-04-15
      • 2016-08-05
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      相关资源
      最近更新 更多