当我试图在EF4中将一个集合映射到另一个集合时,我遇到了这个错误。
无法设置“Resource_EF8107704B4FCA2E071F38C2F2EE328AAC216CA2A7BF157503E6658A42D7CF53A”类型的属性“ResourceLanguages”,因为该集合已设置为EntityCollection。
我试图像这样编码
foreach (var resource in resources)
{
resourceLanguages = resourceLanguageRepositoty.GetAllByResourceId(resource.Id);
resource.ResourceLanguages = resourceLanguages;
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
使用代理时,无法将集合分配给物化导航属性。你找到一个解决方案,但imho看起来非常无效。首先,如果您的资源附加到上下文,语言将在需要时通过延迟加载加载,但您也可以使用预先加载并在一个查询中加载所有资源及其语言:
var resources = context.Resources.Include("ResourceLanguages").ToList();
您的解决方案会产生N + 1个数据库查询,其中N是集合中的资源数量。