我有一个关于使用实体框架进行预测的问题。
我有三张表:简介、传记和传记翻译
我想做以下预测:(传记 = IQueryable)
return biographies.Select(b => new ProfileBiography
{
Id = b.BiographieID,
OwnerId = b.Profile.ProfileID,
Translations =
b.Translations.Select(t => new DocumentTranslation()
{
DocumentId = b.BiographieID,
FileName = t.BiographyTextFile,
Title = t.Title,
Text = t.Text,
LanguageId = t.LanguageID
})
}
我的问题: OwnerId 投影正确,但翻译次数始终为 0。
投影不适用于集合属性吗?
我也试过 biographies.Inlcude("Translations"),但结果是一样的。
更新
我创建了一个小型测试项目,您可以在这里找到:
只有 3 个表(包括创建和插入语句)、一个 EDMX 文件和一个用于加载传记的类。我仍然无法使用它来投影集合导航属性,简单的导航属性可以正常工作。也许有人可以从测试项目中看到我做错了什么......
更新
我尝试了一种新方法,但仍然没有运气:
using (var context = new DatabaseEntities())
{
return context.BiographySets
.Where(bio => bio.ProfileId == profileId)
.Select(bio => new DocumentModel()
{
Id = bio.Id,
OwnerId = bio.Profile.Id,
Translations = context.BiographyTranslationSets.Where(t => t.BiographyId == bio.Id)
.Select(t => new DocumentTranslation()
{
DocumentId = bio.Id,
LanguageId = t.LanguageId,
Text = t.Text
})
}).ToList();
}
更新
如果我使用匿名类型,它会出人意料地工作......
using (var context = new DatabaseEntities())
{
return context.BiographySets
.Where(bio => bio.ProfileId == profileId)
.Select(bio => new
{
Id = bio.Id,
OwnerId = bio.Profile.Id,
Translations = bio.Translations
.Select(t => new
{
DocumentId = bio.Id,
LanguageId = t.LanguageId,
Text = t.Text
})
}).ToList();
}