【问题标题】:Assign an identity key to non-identity key将身份密钥分配给非身份密钥
【发布时间】:2012-11-15 13:42:56
【问题描述】:

我有一个表table1,主键是Pkey。它是一个标识列。我有另一个表table2,它没有主键和标识列。

我想将table1Pkey 的值插入到table2id 列中。

obj2.id = obj1.Pkey;

我得到一个例外:

无法将值 NULL 插入到列 'id'、表 'table2' 中;列不允许空值。插入失败。

感谢提示。系统是否要将标识属性分配给 id?

更新:

原来table2是空的,我从实体框架创建了新记录。

BDetail obj2= iContext.DetailsRecords.Create();
obj2.id = obj1.Pkey;
iContext.BDetail.Add(obj2);
iContext.SaveChanges(); // exception here

【问题讨论】:

  • 您的应用程序似乎尝试插入 NULL 值。有这种可能吗?
  • 能分享一下table1和table2的表结构吗
  • 你确定 obj1.Pkey 不为空。它是什么类型,我猜是 int 还是别的?
  • 如果 PKey 是 IDENTITY 列,它必须是 NOT NULL!也许Update语句本身有一个问题,没有返回值试图将NULL插入table2
  • 你能发布你尝试过的完整查询吗

标签: c# sql-server sql-server-2008 entity-framework


【解决方案1】:

可能 obj1 还没有创建吗?因此,主键的 NULL 值(如果该行存在,则永远不能为 NULL)。

【讨论】:

  • 实体框架4.0方法。
  • 在第2行的更新代码中,如果我理解正确,不应该说“obj2.id = obj1.Pkey;”正如您在原始帖子中所说的那样?现在它说“obj2 = obj1.Pkey;”
  • 这是一个错字。没关系,问题是如果我在 sql server 中将 id 更改为身份,那么异常就会消失。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2020-03-03
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2015-10-01
  • 2013-02-15
相关资源
最近更新 更多