2012-04-28 63 views
0

任何人都可以解釋爲什麼我有時得到一個NULL插入方法的異常?如上所述只是有時候,這對我來說更令人困惑。LINQ C#空異常

表訂單行具有referemce在的datacontext(.dbml文件)表產品

public void insertNewOrder(string accountNumber, int orderId) 
{ 
    var order = orderRep.GetOrderById(orderId); 
    var orderlineData = orderLineRep.GetOrderLines(order.OrderID); 

    foreach (var orderLine in orderlineData) 
    { 
     int currentStatus = dlvRep.getAxOrderStatusNumber(orderLine.ItemNumber, 0); 
     string levering = ""; 
     string status = dlvRep.getAxOrderStatus(orderLine.ItemNumber, currentStatus, out levering); 
     WebsiteOrderStatus insertNew = new WebsiteOrderStatus 
     { 
       AccountNumber = accountNumber, 
       OrderID = orderId, 
       ItemNumber = orderLine.ItemNumber, 
       ItemName = orderLine.Product.Name, 
       FormatName = orderLine.Product.ProductFormatName, 
       Quantity = orderLine.Quantity, 
       Price = orderLine.Price, 
       Status = status, 
       Levering = levering, 
       LastUpdatedStatus = currentStatus, 
       CreatedDate = DateTime.Now 
     }; 
     db.WebsiteOrderStatus.InsertOnSubmit(insertNew); 
     db.SubmitChanges(); 
    } 
} 

異常消息:

Cannot insert the value NULL into column 'FormatName', table 'GWportal.dbo.WebsiteOrderStatus'; column does not allow nulls. INSERT fails. 

該語句已終止。

當我查找此代碼無法找到ProductFormatName的產品時。 ProductFormatName的值不是NULL,它的值如我所期望的那樣:「PS3」。

另一個奇怪的是,爲什麼不是在抱怨:

ItemName = orderLine.Product.Name, 

這coulmn不允許空值無論是。

+0

看看你在調試「insertNew」 – Likurg 2012-04-28 13:18:49

回答

2

這可能是orderLineRep.GetOrderLines(order.OrderID)的代碼中的一個錯誤,導致orderLine.Product.ProductFormatName被設置爲null

嘗試加入一些調試代碼:

foreach (var orderLine in orderlineData) 
    { 
     if (orderLine.Product.ProductFormatName == null) { 
      throw new Exception("ProductFormatName == null"); 
     } 

     // ... 

另一個奇怪的是,爲什麼不是在抱怨:

ItemName = orderLine.Product.Name, 

這coulmn不允許空值無論是。

我能想到的兩種解釋:

  1. orderLine.Product.Name不爲空。上面提到的錯誤可能僅影響ProductFormatName
  2. orderLine.Product.Name爲空,但是一個錯誤足以立即終止語句。只會報告一個錯誤。在第一個錯誤得到解決之前,其他錯誤也不會被報告。
+0

感謝您的回覆。正如你所提到的,我嘗試添加一些調試代碼,並發現當我檢查ProductFormatName的值時,我正在查找錯誤的產品。 這是一個折扣票據,它被視爲訂單中的產品。此「產品/折扣票據」在Product.Name中有一個名稱,但doens沒有ProductFormatName。 非常感謝您幫助我找到這個愚蠢的錯誤:) – KLIM8D 2012-04-28 13:53:14