Entity framework 4 为什么我会出错;无法设置类型Y上的属性X,因为集合已设置为EntityCollection“;?

Entity framework 4 为什么我会出错;无法设置类型Y上的属性X,因为集合已设置为EntityCollection“;?,entity-framework-4,Entity Framework 4,当我试图在EF4中将一个集合映射到另一个集合时,我遇到了这个错误 无法设置类型“Resource_EF810770B4FCA2E071F38C2F2EE328AAC216CA2A7BF15753E6658A42D7CF53A”上的属性“ResourceLanguages”,因为集合已设置为EntityCollection 我试着这样编码 foreach (var resource in resources) { resourceLanguages = resourceLanguageRe

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

无法设置类型“Resource_EF810770B4FCA2E071F38C2F2EE328AAC216CA2A7BF15753E6658A42D7CF53A”上的属性“ResourceLanguages”,因为集合已设置为EntityCollection

我试着这样编码

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

有人能帮我解决这个问题吗?

在使用代理时,您不能将集合分配给物化导航属性。你找到了一个解决方案,但我认为它看起来相当无效。首先,如果您的资源连接到上下文,则在需要语言时,语言将通过延迟加载进行加载,但您也可以使用快速加载,并在单个查询中加载所有资源及其语言:

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

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

可以像resource.ResourceLanguages.AddRange(ResourceLanguages)那样执行查询<代码>添加范围不是一种ICollection方法