我正在使用 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);
With 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);
有没有办法获得的行为Find
急切地加载SingleOrDefault
?
The Find
方法用于通过键搜索单个实体。这SingleOrDefault
方法用于执行查询。预加载只能是真正在数据库上执行的查询的一部分,因此不能与Find
.
作为解决方法,您可以这样重写它:
// This will check only on in-memory collection of loaded entities
Book book = context.Books.Local.SingleOrDefault(b => b.Id == 1);
if (book == null)
{
book = context.Books.Include(b => b.Review).SingleOrDefault(b => b.Id == 1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)