EntityFramework Core 1.1.0缺少Include()?

我正在使用EntityFramework Core 1.1.0。 我可以查询表并加载实体,但Microsoft的指令表明我是否要加载关系数据,我应该使用.Include()函数:

https://docs.microsoft.com/en-us/ef/core/querying/related-data

您可以使用Include方法指定要包含在查询结果中的相关数据。 在以下示例中,结果中返回的博客将使用相关post填充其“ Posts属性。

 using (var context = new BloggingContext()) { var blogs = context.Blogs .Include(blog => blog.Posts) .ToList(); } 

我没有.Include()选项。

任何想法为什么缺少或如何加载外键关系数据?

 this.context.Mail .Include("Files") // This is missing 

我已经使用显式加载关系数据。 这适用于小型结果集,但随着我的数据集的增长,这将让我感到悲伤。

 var mails = this.context.Mail.ToList(); mails.ForEach(mail => { this.context.Entry(mail) .Collection(m => m.Files) .Load(); }); 

你是否包含了正确的命名空间?

从文档中链接的存储库 :

 using Microsoft.EntityFrameworkCore; using System.Linq; 

我想你的电话应该是:

 this.context.Mail .Include(m => m.Files).ToList(); 

有关更详细的答案:您需要首先确保正确形成您的MailFile模型,以便在MailFile之间存在一对多关系:

 public class Mail { public int MailId { get; set; } public virtual ICollection Files { get; set; } } public class File { public int FileId { get; set; } public int MailId { get; set; } public virtual Mail Mail { get; set; } } 

然后确保将MailFile DbSet包含在DbContext中:

 public class MailingContext : DbContext { public MailingContext(DbContextOptions options) : base(options) { } public DbSet Mails { get; set; } public DbSet Files { get; set; } protected override void OnModelCreating(ModelBuilder builder) { } } 

然后在您的控制器类或存储库类中,您可以创建一个方法来获取带有文件的邮件,如下所示:

 public IList GetMails() { return _context.Mails.Include(m => m.Files).ToList(); } public Mail GetMailById(int id) { return _context.Mails.Include(m => m.Files).SingleOrDefault(m => m.MailId == id); } 

添加命名空间以获取该选项。

 using Microsoft.EntityFrameworkCore; 

如果你还没有添加,

 using System.Linq; 

如果启用延迟加载,则甚至不需要使用include。