我有一个ef 4模型,我正在使用自我跟踪实体。在这个模型中有一个名为Organization的实体。每个组织可以有许多位置(地址)。如果我尝试选择一个位置(所以我可以删除它),那么:
var location = _container.Locations.FirstOrDefault(l => l.Id == id);
我知道已经有一个数据阅读器打开了,所以我无法打开另一个。如果我执行以下操作:
var location = _container.Locations.Include("Organisation").FirstOrDefault(l => l.Id == id);
然后一切正常。
使用Intellitrace我可以看到,在失败的查询中,它执行ADO命令以获取该位置,然后执行另一个命令来获取位置和组织。
对于selftracking实体,这是一个我需要做些不同的错误吗?
干杯
答案 0 :(得分:0)
不,这不是一个错误。如果您迭代一个查询的结果并且在此迭代中执行另一个查询(这也可能由于延迟加载而发生,但自跟踪实体不支持延迟加载),通常会发生这种情况。最简单的解决方案是简单地允许多个活动数据读取器(您的数据库必须支持它)。对于SQL Server 2005及更高版本,您只需将连接字符串添加到此部分:MultipleActiveResultSets=true;