【问题标题】:Entity framework issue "The table/view ' does not have a primary key defined." [closed]实体框架问题“表/视图'没有定义主键。” [关闭]
【发布时间】:2015-08-06 10:41:50
【问题描述】:

我是实体框架的新手。我正在使用现有数据库并且表没有定义主键。当我使用实体框架时,我收到错误“表/视图'没有定义主键。键已被推断并且定义被创建为只读表/视图。”。我查了几个堆栈溢出解决方案/google,还是有一些疑问,

  1. EF 不使用标识列
  2. 我对向表中添加主键持怀疑态度,因为它可能会影响上游/下游进程。
  3. 请提供替代方案/建议?

谢谢,

【问题讨论】:

  • 表的名称是什么,你能展示你的模型类吗?

标签: c# .net sql-server entity-framework


【解决方案1】:

我在 Davis 博客(下面的链接)中找到了解决此错误的方法,我将其粘贴在这里。 http://www.ericsdavis.net/index.php/2009/03/14/entity-framework-and-primary-key-inference/

  1. 如果 Visual Studio 中的模型设计器仍处于打开状态,请关闭它并 在 XML 编辑器中重新打开 .edmx 文件;
  2. 找到 edmx:StorageModels -> Schema -> Entity Container -> 引用相关表的 EntitySet 元素;
  3. 在 EntitySet 元素上,将 store:Schema 属性重命名为 架构;完全删除 store:Name 属性;
  4. 删除打开和关闭 DefiningQuery 标记和所有内容 他们之间;

保存并关闭 .edmx 文件。

它对我来说就像一个魅力,希望它有所帮助。

【讨论】:

  • 这解决了我的问题。此外,当我在 XML 编辑器中打开 edmx 文档时,我在 对象旁边阅读了这行自动生成的注释。它说(<!--Errors Found During Generation: warning 6002: The table/view SOME_SCHEMA.SOME_TABLE' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.-->。我认为这表明了我们所面临的问题。我认为@BrunoC 修复的作用是删除自动生成的评论的上述推论。
  • 对于我正在处理的项目,CSC.Exe 生成的警告表明 Entity 类将被视为只读视图,因为未定义主键是有意义的。但是,为了保持构建输出消息清晰易懂,我只是按照“如何:抑制编译器警告”docs.microsoft.com/en-us/visualstudio/ide/…。我希望这对您有帮助和兴趣。
【解决方案2】:

您需要做的就是告诉您的 POCO 使用哪一列作为主键。
如果您的表有一个 IDENTITY 列,那么告诉它使用它。

[Table("POCOS")]
class POCO {
    [Key]
    int theIdentityColumn {get;set;}
{

【讨论】:

    【解决方案3】:

    在实体框架中,如果您想在任何列上分配主键,请在类的该属性上写入 [Key]。

    public class Student
        {
    
            [Key]
            public int StudentKey { get; set; }
    
            public string StudentName { get; set; }
    
        }
    and in Entityframework you donot write any thing just use Below class that create automatic Primarykey 
    
     Class student
        {
        public int id {get;set}
        public string Name {get;set}
        }
    more detail why should this happen read below article
    [Entity Framework][1]
    

    【讨论】:

      【解决方案4】:

      我在创建要在项目中使用的视图时遇到了类似的问题。
      创建后,我更新了.edmx和同样的错误关于

      表/视图 ' 没有定义主键。

      我清理了我的解决方案,重新构建,关闭了 Visual Studio 并重新启动它。
      之后我重复了清理和重建解决方案的过程,错误消失了。

      【讨论】:

      • 这当然不是解决这个问题的标准方法。重启 VS 并不会神奇地将主键添加到数据库中的表中。
      • 这个工作有时。添加 [Key] 注释后,我不得不清理、重建和关闭解决方案。虽然不理想。
      • 您必须在视图中添加主键约束,如果没有主键,实体框架将不会导入您的视图。
      猜你喜欢
      • 2021-08-06
      • 2011-04-29
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2015-09-08
      • 2011-05-05
      相关资源
      最近更新 更多