【问题标题】:Why is Entity Framework returning null?为什么实体框架返回 null?
【发布时间】:2014-04-22 14:54:21
【问题描述】:

所以我有这些课程:

[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 的 Item 部分,但我不知道如何解决这个问题!

下面是调用数据的代码:

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

【问题讨论】:

  • 你的目标是 WinForm/WPF Web 什么样的应用程序?
  • 您确定Item 已加载吗?您可能必须明确包含它。
  • @Habib 这是一个 WinForm 应用程序
  • @germi 我认为那是我的问题是我的回答你的意思是什么?还是我错过了什么?

标签: c# winforms linq entity-framework datagridview


【解决方案1】:

实体框架默认工作是惰性的。当您加载订单时,您可能想Include 您的Item。像这样的:

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

【讨论】:

    【解决方案2】:

    我可以通过使用我的导航属性将查询更改为也有一个 Include 与项目表来解决此问题:

    所以我改变了这一行

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

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

    然后一切正常。

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 2012-03-04
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多