【发布时间】:2012-03-25 00:38:04
【问题描述】:
我刚刚为一个使用 EntityFramework 的新项目声明了一些代码优先模型。
public class BlogEntry
{
public long Id { get; set; }
public long AuthorId { get; set; }
public DateTime PublishedStamp { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public virtual User Author { get; set; }
}
public class User
{
public long Id { get; set; }
public string Email { get; set; }
// ...
}
class BlogDb : DbContext
{
public DbSet<BlogEntry> Entries { get; set; }
public DbSet<User> Users { get; set; }
}
现在假设我要检索 10 个最近的博客条目:
var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();
现在的问题是访问entry.Author 会导致另一个数据库查询。您不希望对每个博客条目都进行单独的此类查询。现在,我的理解是Include的目的正是这种情况,所以我可以说:
var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();
但是,这种方法似乎不存在。只有一个Include(string),像这样:
var entries = new BlogDb().Entries.Include("Author").(...).ToList();
但这很烦人,因为它没有在编译时检查,并且会被重命名重构遗漏。当然,带有 lambda 的版本是“正确”的方法。
那个方法去哪儿了?它不再包含在 EntityFramework 中吗?
(我知道我可以为自己编写一个扩展方法来实现这一点,所以你不必。我只是想知道我是否遗漏了什么。)
【问题讨论】:
标签: c# entity-framework