gpt4 book ai didi

c# - Entity Framework 的投影

转载 作者:行者123 更新时间:2023-11-30 12:49:37 24 4
gpt4 key购买 nike

我对使用 Entity Framework 进行预测有疑问。

我有三个表:简介、传记和传记翻译

我想做以下投影:(biographies = 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"),但结果是一样的。

更新

我创建了一个小测试项目,您可以在这里找到:

TestProject.zip

只有 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();
}

最佳答案

好的,我发现了问题:

这是我的文档模型类:

public class DocumentModel
{
public DocumentModel()
{
_translations = new List<DocumentTranslation>();
}

public int Id { get; set; }

public int OwnerId { get; set; }

private List<DocumentTranslation> _translations;
public IEnumerable<DocumentTranslation> Translations
{
get { return _translations; }
set { _translations = value.ToList(); }
}
}

问题来了:

set { _translations = value.ToList(); }

我不能在我的 Setter 中调用 ToList(),因为它会中断查询。

关于c# - Entity Framework 的投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com