2011-06-27 225 views
2

我非常需要帮助。我花了一整天的时间,甚至没有一个小时浪费在一个项目上。我有一个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插入,即使此代码在之前工作正常。我甚至完全恢复数据库并重建数据层,但无济于事。

我很难过这个和时间,我在我身边。

+1

绝对没有机会GetNextOrderId(odc)可以在不抛出异常的情况下返回null? – jpm

+1

您是否尝试运行分析器来查看正在生成并发送到数据库的SQL? – kprobst

+0

jpm ...我看到ID一直正确设置,直到它进入InsertOnSubmit方法,但它一直试图提交一个空值。我的假设我出于某种原因,没有任何价值观正在设定,整个对象经过为空,但我不明白为什么。在这一点上,我必须开始假设这是由于在某处使用了缓存版本的代码。其他没有任何意义。 – webwires

回答

1

所以,这个答案很奇怪,我不是100%肯定的原因。基本上我所做的是完全重建LINQ to SQL数据层(只需在设计器中拖放相同的表格),然后彻底清理并重建整个解决方案。之后,代码再次神奇地工作。无需更改代码。

由于某些原因,代码被错误地缓存,导致它无法将对象传输到数据层(这是我的猜测)。在这种情况下恢复似乎是一个奇怪的错误。