Entity framework 4 子实体的多个打开数据读取器出错

Entity framework 4 子实体的多个打开数据读取器出错,entity-framework-4,self-tracking-entities,Entity Framework 4,Self Tracking Entities,我有一个EF4模型,我使用自跟踪实体。在这个模型中,有一个称为组织的实体。每个组织可以有多个地址。如果我尝试选择一个位置以便删除它,则: var location = _container.Locations.FirstOrDefault(l => l.Id == id); 我得到一个erorr,已经有一个数据读取器打开,所以我无法打开另一个。如果我这样做: var location = _container.Locations.Include("Organisation").First

我有一个EF4模型,我使用自跟踪实体。在这个模型中,有一个称为组织的实体。每个组织可以有多个地址。如果我尝试选择一个位置以便删除它,则:

var location = _container.Locations.FirstOrDefault(l => l.Id == id);
我得到一个erorr,已经有一个数据读取器打开,所以我无法打开另一个。如果我这样做:

var location = _container.Locations.Include("Organisation").FirstOrDefault(l => l.Id == id);
然后一切都很好

使用Intellitrace,我可以看到,对于失败的查询,它执行ADO命令以仅获取位置,然后执行另一个命令以获取位置和组织


这是一个bug还是我需要为自跟踪实体做一些不同的事情?

不,这不是bug。如果您迭代一个查询的结果,并且在此迭代中执行另一个查询,则通常会发生这种情况。由于延迟加载,也可能发生这种情况,但自跟踪实体不支持延迟加载。最简单的解决方案是只允许多个活动数据读取器—您的数据库必须支持它。对于SQL Server 2005及更新版本,您只需将以下部分添加到连接字符串中:MultipleActiveResultSets=true

我已经启用了火星。我只使用一个linq查询——底层实现正在执行第二个sql查询,所以我仍然认为这是一个bug。我有一个简单的解决办法,所以我不介意。