假设您有两个班级,订单和客户:
public class Customer{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order{
public int OrderId{get; set;}
public Customer OrderCustomer{get; set;}
}
现在,我想在我的Customer类中添加一个“CanBeDeleted”方法,告诉我的程序是否可以删除该客户。我想确保只有在没有订单的情况下才能删除客户:
public class Customer{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public ICollection<Order> Orders { get; set; }
[NotMapped]
public bool CanBeDeleted {
get {
return Orders.Count() == 0;
}
}
}
当然,问题是程序不知道客户是否加载了订单的include选项。
如何在“CanBeDeleted”getter中确保订单已加载/如何在不引用DbContext的情况下加载它们?
答案 0 :(得分:1)
默认情况下,Entity Framework Code First会在访问它们时延迟加载相关实体。
但是,您拥有相关实体的属性必须声明为virtual
,而您似乎并没有这样做。
必须声明它们virtual
的原因是实体框架创建了一个代理类,它覆盖了您的实现并注入代码以在首次访问时加载相关实体。