我正在尝试深度加载 EF 对象并将其保存在缓存中一段时间。就我而言,我有一个对象(比如用户),然后是一个内部书籍列表设置为虚拟集合
public virtual ICollection<Books> ListOfBooks { get; set; }
书籍和用户之间存在外键关系的地方(一切正常)
我正在尝试在静态中心类中深度加载它
public static List<User> LoadAllBooksAndUsers() {
using (MyDB dc = new MyDB())
{
dc.Users.Include("ListOfBooks");
List<User> a = dc.Users.Where(l => l.Status == 1).ToList();
return a;
}
}
在我的调用代码中,我有这样的东西:
var evx = DB.LoadAllBooksAndUsers();
var q = evx.Single(m=>m.name==name);
在调试器或 q.ListOfBooks 中检查 evx 表明 listOfBooks 有一个对象处理异常并且它为空。
这是随机的 - 它似乎偶尔会起作用,我不知道在什么条件下。
我对正在发生的事情一无所知 - 我的理解是使用 .Include() 然后枚举它会加载所有相关的外键对象,那么为什么该方法不将所有书籍深度加载到用户中?我错过了什么?
(我想深度加载这个对象并缓存一段时间,因为其中的数据经常使用)