我有下面的代码从一个客户表的EntityFramework已经有与此命令相关联的打开的DataReader,必须先关闭
var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList();
的映射函数检索数据,映射实体对象,一个企业对象,它看起来像这样
internal static Customer Map(CustomerEntity entity)
{
if (entity == null)
return null;
return new Customer
{
Id = entity.Id,
Name = entity.Name,
Addresses = Map(entity.Addresses)
};
}
现在,上面的代码运行良好。
然而,当我尝试这样做:
var customers= context.CustomerEntities.Select(Mapper.Map).ToList();
我得到的错误信息:There is already an open DataReader associated with this Command which must be closed first
正在执行的映射功能时。
现在我知道要解决这个问题,我必须在我的连接字符串中设置multipleactiveresultsets=True
。我试过了,它确实解决了我的问题。
但是,当我运行SQL事件探查器时,查询所有来自实体框架的客户也会自动检索所有地址,即使我不需要它们。
除了必须设置multipleactiveresultsets=True
之外,还有一种解决方法吗?我不想让地址一直被加载。
您可能希望在您的示例之前检查您的代码,我敢打赌,在您的代码被解雇之前,您还有另一个上下文激活。 – Middas
不,我没有另一个活动的上下文 –
丹,你可能会做些什么。让我试试 –