错误6002:表/视图没有定义主键

tes*_*est 40 entity-framework

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

有什么方法可以摆脱这些警告吗?或者是否有某种程度上让实体框架意识到这不是一个可编辑的表,而且不需要主键?我主要是从项目美学的角度来看(我不喜欢在我的错误列表中看到警告).

dji*_*kay 37

我完全理解你来自哪里.这是我在试图掌握EF时遇到的最大烦恼之一,显然,这是一个非常普遍的问题.

对我有用的解决方案是在设计器模式下以视图打开EDMX并自己分配主键.只要有一个,它真的无关紧要.右键单击要设置为主键的列,然后选择Entity Key(这是一个复选框选项).您可能必须退出并重新启动Visual Studio,直到此警告消失为止.

我希望它对你也有用.但即使它确实如此,这也是一个短期修复,因为下次更新视图时,它可能会遇到同样的问题.但只要上述步骤有效,就应该花几秒钟来修复.

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

  • 你不完全正确.您无法标记所需的任何列,因为如果您标记的列没有唯一值,您将收到一堆运行时错误,告诉您有两个具有相同主/实体键的对象. (8认同)
  • 这不起作用.我在我的视图实体上有一个手动定义的主键,在一个唯一的列上(恰好是底层表上的主键),我仍然收到此警告. (4认同)
  • @Santhos ...甚至更复杂,如果您将实体用作只读实体,则可以获取实体的重复,因为它们已经在查询中进行了缓存,EF会在稍后看到“相同的键”相同的查询,然后复制原始内容。/叹息欢乐时光。 (2认同)
  • @ruffin 这很粗糙(没有双关语)。我从未遇到过这种行为,但这听起来像是一个漫长的夜晚调试会话。 (2认同)

小智 27

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

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

在尝试任何操作之前,可以尝试确保您不在edmx中手动更改任何内容.

我希望这将有所帮助.

  • 不知道为什么但它有效.谢谢 (3认同)
  • 执行此操作后双击“.edmx”文件的尴尬时刻。 (2认同)
  • 不幸的是,逃避 edmx 警告并不能解决或忽略它们。一旦你打开 edmx,它们仍然存在。我不会称其为解决方案/解决方案。 (2认同)

小智 6

我在 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