为什么我收到错误“由于集合已经设置为EntityCollection,因此无法设置Y类型的属性X”?

时间:2011-04-11 10:21:19

标签: entity-framework-4

当我试图在EF4中将一个集合映射到另一个集合时,我遇到了这个错误。

  

无法设置“Resource_EF8107704B4FCA2E071F38C2F2EE328AAC216CA2A7BF157503E6658A42D7CF53A”类型的属性“ResourceLanguages”,因为该集合已设置为EntityCollection。

我试图像这样编码

foreach (var resource in resources)
{
    resourceLanguages = resourceLanguageRepositoty.GetAllByResourceId(resource.Id);
    resource.ResourceLanguages = resourceLanguages;
}

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

使用代理时,无法将集合分配给物化导航属性。你找到一个解决方案,但imho看起来非常无效。首先,如果您的资源附加到上下文,语言将在需要时通过延迟加载加载,但您也可以使用预先加载并在一个查询中加载所有资源及其语言:

var resources = context.Resources.Include("ResourceLanguages").ToList();

您的解决方案会产生N + 1个数据库查询,其中N是集合中的资源数量。