【问题标题】:LINQ-to-SQL - The null value cannot be assigned to a member with typeLINQ-to-SQL - 无法将空值分配给具有类型的成员
【发布时间】:2011-06-02 09:25:26
【问题描述】:

我正在处理的 LINQ 查询存在问题。这已经完美运行了一段时间,但我们回滚了数据库,现在它不起作用了。

基本上,我将新行插入到具有自动生成 BigInt PK 的表中。但是当 SubmitChanges 被调用时,我得到了这个错误:

空值不能分配给 System.Int64 类型的成员,即 不可为空的值类型

我查看了生成的 SQL,在插入之后问题似乎可能围绕着这个:

选择转换(大整数, SCOPE_IDENTITY()) AS [值]

这似乎返回 null,但我不知道为什么。表和 LINQ dmbl 都正确设置为自动生成 PK。

有什么想法吗?

编辑:经过一些调试,包括按照某人的建议在 SQL 中手动尝试插入,我偶然发现了一个非常奇怪的问题 -

'无法更新列或表达式'杰出''

Outstanding 是一个不可为空的小数 (9,2) 字段

【问题讨论】:

  • 如果您在 SubmitChanges 调用上设置断点,记录是否会以正确的自动递增 ID 值插入到数据库中?
  • 好的,如果你打开你的 DBML 文件,右键单击有问题的属性(即:生成 0 的 ID 列,然后单击“属性......生成的值”设置为 True ?
  • 是的,它设置为 true - 这是我尝试的第一件事。
  • 请包括您的表架构以及您的插入 sql
  • 未完成的列是计算列吗?

标签: c# sql linq linq-to-sql


【解决方案1】:

看看this thread - 其他人和你有同样的错误,同样的情况。事实证明,运行实际插入存在问题,导致没有插入记录。然后在调用SCOPE_IDENTITY() 时返回null,因为没有插入记录。

尝试通过 Sql 管理工具将相同值的直接Insert 运行到表中,并查看行是否正确插入。可能还有其他一些问题阻止了这种情况(除了自动生成的 PK),这将是问题的根本原因。

【讨论】:

  • 感谢您的帮助,我在帖子中添加了更多信息,因为我遇到了更多错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
相关资源
最近更新 更多