EF懒惰加载 - 我可以在以后检索子集合吗?

时间:2013-10-17 07:12:52

标签: entity-framework lazy-loading

我使用Code First和Entity Framework。

我有一个带有虚拟属性的类到另一个类(延迟加载)。

public class Order{
  public int Id { get; set; }
  public virtual ICollection<OrderItem> OrderItems { get; set; }
}

如果我从数据库中获取Order并且不包含OrderItem,那么关闭DbContext,是否可以在以后加载它们?如果有,怎么样?

例如。

private static Order GetFirstOrder(Func<Order, bool> predicate)
{
   using (var db = new MyContext())
   {
       return db.Orders.First(predicate);
   }
}

private static void DoSomething()
{
    var order = GetFirstOrder(a => a.Id == 1);
    //do something with OrderItems later?
}

2 个答案:

答案 0 :(得分:1)

只要查询的上下文存活,

Lazy loading就可用

如果已关闭,则结束,您将不得不重新查询(某些GetOrderItemsByOrder查询)或重新附加。无论如何,“手动”做一些事情。

答案 1 :(得分:0)

您应该包含集合名称。

var myItemWithCollection = (from s in db.tableName.Include("ListName").Where(s => s.Id.Equals(ItemId)) select s).FirstOrDefault();