2014-04-22 1 views
0

그래서 나는이 수업이 있습니다Entity Framework에서 null이 반환되는 이유는 무엇입니까?

[Table("OrderInfo")] 
public class OrderInfo 
{ 
    public long ID {get; set;} 
    public long OrderID {get; set;} 
    public virtual Order Order { get; set; } 
    public long ItemID {get; set;} 
    public double Qty { get; set; } 
    public virtual Item Item { get; set; } 
} 

[Table("Items")] 
public class Item 
{ 

    public Item() 
    { 
     this.Orders = new List<OrderInfo>(); 
    } 
    #region Strings 
    public string Color { get; set; } 
    public string FullName { get; set; } 
    [Column(@"Sheet/Roll")] 
    public string Type { get; set; } 
    public string PrimaryMachine { get; set; } 
    public string Alias { get; set; } 
    public string Brand { get; set; } 

    #endregion 

    #region Long 
    public long ID { get; set; } 
    public long? Weight { get; set; } 
    #endregion 

    #region Doubles 
    public double? Size1 { get; set; } 
    public double? Size2 { get; set; } 
    public double? Size3 { get; set; } 
    #endregion. 

    public virtual ICollection<OrderInfo> Orders { get; set; } 
} 

와 나는 날이 NullReferenceException가 발생합니다 다음 코드를 사용하여 널 (null)를 디버깅하는 OrderInfo의 항목 부분은 내가 알아낼 수 없을 때이 생각을 해결하는 방법을 때 ! 아래

데이터를 호출하는 코드입니다

  int ID = Convert.ToInt32(dgv["ID", dgv.SelectedRows[0].Index].Value); 
      List<OrderInfo> OrderInfo = new List<OrderInfo>(); 
      OrderInfo = c.OrderInfo.Where(x => x.OrderID == ID).ToList(); 

      if(OrderInfo.Count <= 0) 
      { 
       MessageBox.Show("No Info Found For This Order!"); 
       ClearForm(); 
       return; 
      } 

      lblPO.Text = "P.O. # " + OrderInfo[0].ID.ToString(); 
      lblRequestedBy.Text = "Requested By: " + OrderInfo[0].Order.RequestedBy; 
      lblOrderDate.Text = "Ordered On: " + OrderInfo[0].Order.Date.ToShortDateString(); 

      dgvOrderItems.DataSource = OrderInfo.Select(x => new { x.ItemID, x.Qty, x.Item.FullName, x.Item.Brand, x.Item.Color }).ToList(); 
+0

어떤 종류의 응용 프로그램을 WinForm/WPF Web로 타겟팅합니까? – Habib

+0

'Item'이로드 되었습니까? 명시 적으로 포함해야 할 수도 있습니다. – germi

+0

@Habib 이것은 WinForm 응용 프로그램입니다. – user2125348

답변

0

나는 또한 나의 탐색 속성 사용하여 항목 테이블과 Include을 가지고 쿼리를 변경하여이 문제를 해결할 수 있었다 : 그래서 변경

이 라인

OrderInfo = c.OrderInfo.Where(x => x.OrderID == ID).ToList(); 

OrderInfo = c.OrderInfo.Include("Item").Where(x => x.OrderID == ID).ToList(); 

그리고 모두 정상적으로 작동했습니다.

1

Entity Framework는 기본적으로 게으르게 작동합니다. 주문을로드 할 때 ItemInclude을 입력 할 수 있습니다. 다음과 같은 것 :

// by using 'Include' you tell EF to fetch Item with your OrderInfo 
OrderInfo = c.OrderInfo.Include("Item").Where [...] 
관련 문제