2012-04-28 5 views
0

누군가가 왜 내가이 삽입 메서드에서 NULL 예외가 발생하는지 설명 할 수 있습니까? 나는 때때로 혼란 스럽다.LINQ C# Null 예외

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

이 문이 종료되었습니다

테이블 주문 행 DataContext를 (하면 .dbml 파일)의 테이블 제품에 referemce

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(); 
    } 
} 

예외 메시지가 있습니다.

이 코드에서 ProductFormatName을 찾는 데 문제가있는 제품을 조회 할 때. ProductFormatName의 값이 NULL이 아니며 예기치 못한 "PS3"값을 가지고 있습니다. 하나 널 (null)을 허용하지 않는이 coulmn이

ItemName = orderLine.Product.Name, 

:이 불평하지 않는 이유

또 다른 이상한 일이다.

+0

"insertNew"에있는 디버그를보십시오 – Likurg

답변

2

null으로 설정되는 것이 아마도 orderLineRep.GetOrderLines(order.OrderID) 코드의 버그 일 것입니다. 일부 디버그 코드를 추가

봅니다 : 하나 널 (null)을 허용하지 않습니다

ItemName = orderLine.Product.Name, 

이 coulmn :

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

     // ... 

또 다른 이상한 점은, 왜는 불평하지 않는다.

나는이 설명을 생각할 수 있습니다 :

  1. orderLine.Product.Name가 null이 아닙니다. 위에 언급 된 버그는 ProductFormatName에만 영향을 미칠 수 있습니다.
  2. orderLine.Product.Name은 null이지만 한 오류만으로 문을 즉시 종료 할 수 있습니다. 하나의 오류 만보고됩니다. 첫 번째 오류가 수정 될 때까지는 다른 오류도보고되지 않습니다.
+0

답장을 보내 주셔서 감사합니다. 언급 한대로 일부 디버그 코드를 추가하려고 시도했는데 ProductFormatName 값을 검사 할 때 잘못된 제품을 찾고있었습니다. 할인 항공권이었으며, 주문 상품으로 간주됩니다. 이 "제품/할인 티켓"은 Product.Name에 이름이 있지만 ProductFormatName은 없습니다. 이 어리석은 실수를 찾아 나를 도와 주셔서 고마워요 :) – KLIM8D