【问题标题】:Can't perform Create, Update or Delete operations on Table because it has no primary key无法对表执行创建、更新或删除操作,因为它没有主键
【发布时间】:2015-01-26 17:07:46
【问题描述】:

我一直在尝试在具有标识列 RequestID(也是主键)的表中插入行

    HelpdeskLog logEntry = new HelpdeskLog { RequestBody = message.Body };
    if (attachment != null)
        logEntry.Attachments = Helper.StreamToByteArray(attachment.ContentStream);
    Database.HelpdeskLogs.InsertOnSubmit(logEntry);

但我的代码不可避免地会引发以下错误

无法对 Table 执行创建、更新或删除操作,因为它没有主键。

尽管主键列确实存在

这就是我试图做的:

  1. 在调试器中查看插入到对象模型中的标识列的值。是0
  2. 手动(使用 SQL)将假值插入表中 - 工作正常,生成的标识值符合预期
  3. 确保 SQLMetal 是否正确生成了表映射。一切OK,主键属性生成正确

尽管如此,这两种方法都没有帮助。有什么诀窍,有人知道吗?

【问题讨论】:

    标签: linq insert identity


    【解决方案1】:

    我的 C# 代码中也出现了这个问题,并意识到我忘记了 IsPrimaryKey 名称:

      [Table (Name = "MySessionEntries" )]
      public class SessionEntry
      {
         [Column(IsPrimaryKey=true)]  // <---- like this
         public Guid SessionId { get; set; }
         [Column]
         public Guid UserId { get; set; }
         [Column]
         public DateTime Created { get; set; }
         [Column]
         public DateTime LastAccess { get; set; }
      }
    

    即使您的数据库表(MySessionEntries,在这种情况下)已经定义了主键,也需要这样做,因为除非您使用了 linq2sql 工具,否则 Linq 不会自动找出该事实将您的数据库定义拉入 Visual Studio。

    【讨论】:

    • 谢谢!我的代码看起来有点不同,但主体是相同的 [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)] 成功了。
    【解决方案2】:

    LINQ 不允许在没有主键的情况下向表中插入数据。要使用没有主键的表实现插入数据,您可以使用存储过程或创建查询并使用 LINQ 执行。下面的链接提供了很好的解释。

    Can't perform Create, Update or Delete operations on Table(Employee) because it has no primary key

    【讨论】:

      【解决方案3】:

      删除表,然后重新插入。在执行此操作之前,您必须确保该字段旁边有一个小钥匙。重新编译您的项目,一切都应该没问题。

      仅仅因为您更新了数据库并不意味着 DBML 文件会自动更新。它没有,对不起。

      【讨论】:

        【解决方案4】:

        由于该表在 SQL Server 中具有主键,因此在 linq2sql 设计器中重新添加该表。

        如果不是这样,您可以在设计器上手动配置哪些属性是主键的一部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-01
          • 1970-01-01
          • 2011-07-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多