【发布时间】:2012-04-11 17:09:27
【问题描述】:
我正在使用 Entity Framework 4.2(代码优先)来访问我的数据库。我假设如果我使用SingleOrDefault 查询一个实体,它只会在尚未跟踪该实体的情况下查询数据库,但情况似乎并非如此。另一方面,Find 方法似乎正在这样做。 Find 的问题在于它似乎不允许我加载相关数据。
有没有一种方法可以使用Find 方法同时也可以急切地加载数据?例如,我想加载一本书及其所有评论:
// Load book from the database
Book book = context.Books.Find(1);
context.Entry<Book>(book).Collection<Review>.Load(); // Book.Reviews is now populated
// Load book from the change tracker
// This will include all Reviews as well
Book book2 = context.Books.Find(1);
有了SingleOrDefault,我可以在使用 Include 获得图书时加载评论:
// Load book + reviews from the database
Book book = Book.Include("Reviews").SingleOrDefault(b => b.Id == 1);
// Doing the same thing again requeries the database
Book book2 = Book.Include("Reviews").SingleOrDefault(b => b.Id == 1);
有没有办法通过SingleOrDefault 的急切加载来获得Find 的行为?
【问题讨论】:
标签: c# entity-framework ef-code-first