当值不为null时,无法将值null插入列中

Rav*_*erg 2 c# sql-server entity-framework

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

无法将值NULL插入列'BoxID',表'Moroccanoil_Replicated.dbo.Boxes'; 列不允许空值.INSERT失败.

然而,当调试这段代码时,我看到该框实际上不是null,当我在我的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
Run Code Online (Sandbox Code Playgroud)

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

更多相关信息:

  • db.SaveChanges()调用发生异常,而不是插入.
  • BoxID未定义为标识.

以下是调试模式中带有插入值的代码: 在此输入图像描述

SQL中的相同插入工作正常: 在此输入图像描述

Dev*_*iro 6

如评论中所述:

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

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