2012-04-28 44 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