EFオブジェクトをディープロードして、一定期間キャッシュに保持しようとしています。私の場合、オブジェクト(たとえばUser)があり、次に仮想コレクションとして設定された書籍の内部リストがあります
public virtual ICollection<Books> ListOfBooks { get; set; }
BooksとUserの間に外部キー関係がある場合(そしてそれはすべて正常に機能します)
これを静的な中央クラスにディープロードしようとしています
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にオブジェクトが破棄された例外があり、nullであることがわかります。
そして、これはランダムです-それは時々動作するようで、私はどのような条件で動作するのかわかりません。
何が起こっているのかわかりません-.Include()を使用して列挙すると、依存するすべての外部キーオブジェクトが読み込まれるので、メソッドがすべての本をユーザーにディープロードしないのはなぜですか?私は何が欠けていますか?
(このオブジェクトのデータは頻繁に使用されるため、このオブジェクトをディープロードしてしばらくキャッシュしたいと思います)