Tim*_*mwi 71 c# entity-framework
我刚刚为使用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; }
}
Run Code Online (Sandbox Code Playgroud)
现在假设我要检索最近的10个博客条目:
var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)
现在的问题是访问entry.Author将导致另一个数据库查询.您不希望为每个博客条目单独进行此类查询.现在,我的理解是,目的Include正是这种情况,所以我可以说:
var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,该方法似乎并不存在.只有一个Include(string),像这样:
var entries = new BlogDb().Entries.Include("Author").(...).ToList();
Run Code Online (Sandbox Code Playgroud)
但这很烦人,因为它不是编译时检查的,重命名重构会遗漏它.当然,带有lambda的版本是"正确的"方法.
那个方法去哪儿了?它是否不再包含在EntityFramework中?
(我知道我可以为自己编写一个扩展方法来实现这一点,所以你不必这样做.我只想知道我是否遗漏了什么.)
Not*_*ple 103
using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)
它在EF v4.1及更高版本中,但您需要一个引用,因为它是一种扩展方法.
编辑 (感谢@EastonJamesHarvey)
如果使用EF Core,则导入应为:
using Microsoft.EntityFrameworkCore;
Run Code Online (Sandbox Code Playgroud)