在我的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
有谁知道为什么会这样以及如何解决它?
更多相关信息:
答案 0 :(得分:6)
如评论中所述:
EF很可能不会传递ID参数,因为它认为该值是由数据库创建的。这意味着您应该关闭此列的DatabaseGeneratedOptions.Identity。
使用DatabaseGeneratedOption.Identity,EF不会将ID值传递给数据库,因为它怀疑它是由DBMS提供的。当它怀疑具有给定Id值的对象在数据库中时,这可能导致此问题或DbUpdateConcurrencyException,但它实际上已被DBMS更改。
答案 1 :(得分:0)
如前所述,EF 不会将 ID 列传递给数据库。如果您有不希望有自动增量值的情况,下面是一个例子
public class PackingInventory
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }