我非常需要帮助。我花了一整天的时间,甚至没有一个小时浪费在一个项目上。我有一个LINQ to SQL的数据层,并使用下面的代码在做一个简单的插入到数据库:当NOT NULL时Linq to SQL“无法插入值NULL”!
using (var odc = new OrdersDataContext())
{
try
{
var id = GetNextOrderId(odc);
order.ID = id;
odc.tblOrders.InsertOnSubmit(order);
odc.SubmitChanges();
}
catch (Exception ex)
{
Logger.LogException(ex);
}
}
由于其他遗留代码,这是这是在SQL 2000上运行的数据库,我不能让数据库变更,但是这段代码在一点上工作正常,然后停止工作。它是这样说的:
无法将值NULL插入'ID'列'表'Order';列不允许有空值。 INSERT失败。
但是,正如您从代码中所看到的以及在代码中可以清楚地看到的那样,ID列获取有效的ID号。 由于某些原因,即使我设置了ID字段,它仍试图将其作为null插入,即使此代码在之前工作正常。我甚至完全恢复数据库并重建数据层,但无济于事。
我很难过这个和时间,我在我身边。
绝对没有机会GetNextOrderId(odc)可以在不抛出异常的情况下返回null? – jpm
您是否尝试运行分析器来查看正在生成并发送到数据库的SQL? – kprobst
jpm ...我看到ID一直正确设置,直到它进入InsertOnSubmit方法,但它一直试图提交一个空值。我的假设我出于某种原因,没有任何价值观正在设定,整个对象经过为空,但我不明白为什么。在这一点上,我必须开始假设这是由于在某处使用了缓存版本的代码。其他没有任何意义。 – webwires