c# – entityframework已经有一个与此Command关联的打开的DataRe
发布时间:2020-12-15 06:53:58 所属栏目:百科 来源:网络整理
导读:我有以下代码从客户表中检索数据 var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList(); mapper函数将实体对象映射到业务对象,它看起来像这样 internal static Customer Map(CustomerEntity entity) { if (entity ==
我有以下代码从客户表中检索数据
var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList(); mapper函数将实体对象映射到业务对象,它看起来像这样 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(); 我收到错误消息:已经有一个打开的DataReader与此命令关联,首先必须关闭Mapper函数执行时. 现在我知道要解决这个问题,我必须在我的连接字符串中设置multipleactiveresultsets = True.我已经尝试了,它解决了我的问题. 但是,当我运行SQL分析器时,从实体框架查询所有客户端,即使我不需要,也自动检索所有的地址. 除了设置multipleactiveresultsets = True之外,还有解决方法吗?我不希望地址被懒惰加载所有的时间. 解决方法
我相信这是因为每个客户的select语句都会导致再次读取数据.为什么不先做ToList(),然后应用映射(选择),如:
var customers= context.CustomerEntities.ToList().Select(Mapper.Map); 我相信这将首先提供数据,然后做映射,你不会有这个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |