gpt4 book ai didi

c# - 无法将值 null 插入列 ... 当值不为 null 时

转载 作者:行者123 更新时间:2023-11-30 20:21:27 26 4
gpt4 key购买 nike

在我的 C# 代码中,我有一个插入到我的数据库中,但它抛出一个异常

Cannot insert the value NULL into column 'BoxID', table 'Moroccanoil_Replicated.dbo.Boxes'; column does not allow nulls. INSERT fails.

然而,在调试这段代码时,我发现该框实际上不为空,此外,当我在我的 SQL SM 中测试完全相同的插入时,它工作得很好。

编辑:

出于某种原因,这是根据探查器实际执行的查询:

exec sp_executesql 
N'INSERT [dbo].[Boxes]([MasterBoxID], [DateTime], [Reported], [StationID])
VALUES (NULL, @0, @1, @2)
SELECT [BoxID]
FROM [dbo].[Boxes]
WHERE @@ROWCOUNT > 0 AND [BoxID] = scope_identity()',
N'@0 datetime2(7),@1 bit,@2 int',@0='2015-11-30 13:37:46.4714394',@1=0,@2=7

有谁知道这是为什么以及如何解决它?

更多相关信息:

  • 异常发生在 db.SaveChanges() 调用上,而不是插入上。
  • BoxID 未定义为身份。

这是带有插入值的 Debug模式下的代码: enter image description here

同样在 SQL 中插入也能正常工作: enter image description here

最佳答案

如评论中所述:

EF 很可能不会传递 ID 参数,因为它认为该值是由数据库创建的。这意味着您应该为此列关闭 DatabaseGeneratedOptions.Identity。

对于 DatabaseGeneratedOption.Identity,EF 不会将 ID 值传递给数据库,因为它怀疑它是由 DBMS 提供的。这可能会导致此问题或 DbUpdateConcurrencyException,当它怀疑具有给定 Id 值的对象在数据库中时,但它实际上已被 DBMS 更改。

关于c# - 无法将值 null 插入列 ... 当值不为 null 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33995393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com