C# 在实体框架中选择新对象时Include()不起作用
我的代码:C# 在实体框架中选择新对象时Include()不起作用,c#,.net,entity-framework,C#,.net,Entity Framework,我的代码: DbContext.Musics() .Include(m => m.Author) .Select(m => new MyComplexType() { MyMusic = m, blablabla = ... }) MyComplexType.MyMusic.Author的结果为空,我不知道如何解决它…我认为不可能按照您的描述执行。
DbContext.Musics()
.Include(m => m.Author)
.Select(m => new MyComplexType()
{
MyMusic = m,
blablabla = ...
})
MyComplexType.MyMusic.Author的结果为空,我不知道如何解决它…我认为不可能按照您的描述执行。当您选择另一种类型(不是您所包含的类型)时,“包含”将不再加载相关实体,正如您自己所注意到的。实现您想要的目标的简单方法是:
DbContext.Musics()
.Select(m => new MyComplexType()
{
MyMusic = m,
Author = m.Author,
blablabla = ...
})
根据评论更新asnwer投诉。使用author代码(以及在EF上下文中启用LazyLoading关闭的设置),您将看到MyComplexType.MyMusic.author始终为空,即使author确实在数据库中。因此,在这种特殊情况下,Include不起作用(不符合您的期望)
在我的答案中包含的代码中,MyComplexType.Author将被正确加载(无需使用任何包含)。因此,它与作者的代码完全不同。我认为不可能像您所描述的那样。当您选择另一种类型(不是您所包含的类型)时,“包含”将不再加载相关实体,正如您自己所注意到的。实现您想要的目标的简单方法是:
DbContext.Musics()
.Select(m => new MyComplexType()
{
MyMusic = m,
Author = m.Author,
blablabla = ...
})
根据评论更新asnwer投诉。使用author代码(以及在EF上下文中启用LazyLoading关闭的设置),您将看到MyComplexType.MyMusic.author始终为空,即使author确实在数据库中。因此,在这种特殊情况下,Include不起作用(不符合您的期望)
在我的答案中包含的代码中,MyComplexType.Author将被正确加载(无需使用任何包含)。因此,它与作者的代码完全不同。这是EF6和之前版本中的一个已知问题,您可以在
该行为已更新,以允许从EF7-beta4开始将(…)包含到投影中,但是对于EF6或之前版本,此错误仍然存在。这是EF6和之前版本中的已知问题,您可以在以下位置在EF中看到错误报告:
行为已更新,允许从EF7-beta4开始将(…)包含到投影中,但是对于EF6或之前版本,此错误仍然存在。请同时发布模型类的配置请添加更多信息?提前谢谢!然后
m.Author
为null
。此特定记录没有AuthorID
。请同时发布模型类的配置请添加更多信息?提前谢谢!然后m.Author
为null
。此特定记录没有AuthorID
。什么是“选择其他类型时包含不再加载相关实体”的含义?这不是真的。我完全不明白你的答案有什么变化。如果急切地加载了Author
,则此属性在您的解决方案中将为null。更新了答案并回复了您的评论。“当您选择其他类型时,包含不再加载相关实体”应该是什么意思?这不是真的。我完全不明白你的答案有什么变化。如果急切地加载了Author
,则此属性在您的解决方案中将为null。更新了对您的评论的答复。您的链接显示它不是bug。它不是为在EF6中工作而设计的。它在EF7中工作,现在得到了支持,但这并不意味着它在EF6中是一个bug。您的链接显示它不是bug。它不是为在EF6中工作而设计的。它在EF7中工作,现在得到了支持,但这并不意味着它在EF6中是一个bug。