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();
有关更详细的答案:您需要首先确保正确形成您的Mail
和File
模型,以便在Mail
和File
之间存在一对多关系:
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; } }
然后确保将Mail
和File
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。