我正在使用EntityFramework Core 1.1.0。我可以查询表并加载实体,但Microsoft的指示表明我是否要加载关系数据,我应该使用Include
函数:
https://docs.microsoft.com/en-us/ef/core/querying/related-data
您可以使用
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();
});
我已经使用显式加载关系数据。这适用于小型结果集,但随着我的数据集的增长,这将让我感到悲伤。
A = matrix(c(1,0,1,1,1,1,0,0,1,1), nrow=2, ncol=5)
colnames(A)<-c("A","B","A","A","B")
A B A A B
1 1 1 0 1
0 1 1 0 1
答案 0 :(得分:19)
您是否包含了正确的命名空间?
From the repository linked in the documentation:
using Microsoft.EntityFrameworkCore;
using System.Linq;
答案 1 :(得分:1)
我认为你的电话应该是:
this.context.Mail
.Include(m => m.Files).ToList();
更详细的答案:
您需要首先确保正确形成Mail
和File
模型,以便Mail
和File
之间存在一对多的关系:
public class Mail
{
public int MailId { get; set; }
public virtual ICollection<File> 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<Mail> Mails { get; set; }
public DbSet<File> Files { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
}
}
然后在您的控制器类或存储库类中,您可以创建一个方法来获取带有这样的文件的邮件:
public IList<Mail> 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);
}
答案 2 :(得分:1)
添加命名空间以获取该选项。
using Microsoft.EntityFrameworkCore;
如果你还没有添加,
using System.Linq;
如果您启用了延迟加载,那么您甚至不需要使用include。