正在加载引用另一个表中相关数据的数据列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正在加载引用另一个表中相关数据的数据列表相关的知识,希望对你有一定的参考价值。
我试图弄清楚如何从实体框架中的表中检索相关数据的集合,但是我还没有解决。
这是两个表之间的多对多关系,如下图所示:
我的问题是我想检索相关的BOOK到一个Author,它是BOOK表的ICollection,但是当我返回时,它给了我一个空列表。我尝试使用显式加载解决此问题:
public AUTHOR Read(int Aid)
{
using(var db = new LibraryDBEntities1())
{
var author = db.AUTHORs.Find(Aid);
db.Entry(author).Collection(a => a.BOOKs).Load();
return author;
}
}
我也尝试过使用热切的加载方式对其进行修饰
return db.AUTHORs.Where(a => a.Aid == Aid).Include("BOOKs").FirstOrDefault();
但是它也不起作用。我试图按照Microsoft文档Loading Related Entities上的文档进行操作,但是我无法弄清楚我在做什么错。有人可以帮我解决这个问题,也许可以解释我做错了什么?
编辑这就是OnModelCreating的样子。我应该在这里更改/添加代码吗?
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
答案
您可以通过GroupJoin如下实现:
var query = memberModels.GroupJoin(emailModels, m => m.Id, e => e.Id, (m, emailCollection) => new
{
FName= m.FName,
LName = m.LName,
MobileNumber = m.MobileNumber,
LandlineNumber = m.LandlineNumber,
WorkNumber = m.WorkNumber,
emailCollection = emailCollection
//emails = string.Join(", ", emailCollection.ToList().Select(e => e.EmailAddress) ).ToList() // you can not use string.Join directly on query, so need to do either ToList or AsEnumerable.
}).AsEnumerable().Select(a => new
{
FName = a.FName,
LName = a.LName,
MobileNumber = a.MobileNumber,
LandlineNumber = a.LandlineNumber,
WorkNumber = a.WorkNumber,
emailAddresses = string.Join(", ", a.emailCollection.Select(e => e.EmailAddress))
});
以上是关于正在加载引用另一个表中相关数据的数据列表的主要内容,如果未能解决你的问题,请参考以下文章
SQL UPDATE SET 一列等于另一列引用的相关表中的值?