我使用实体框架(DbContext
),UnitOfWork和存储库模式编写了一个小型应用程序。以下代码
using (IUnitOfWork testUow = uowFactory.CreateUnitOfWork())
{
foreach (Transponder transp in testUow.Transponders.GetAll()) // outer sql
{
var query = testUow.Animals.GetAll()
.Where(anim => anim.TransponderId == transp.Id); // inner sql
// next line throws EntityCommandException:
Animal test = query.Single();
}
}
产生一个
EntityCommandException: {"Commands out of sync; You can't run this command now"}
Transponders
这Animals
是我的存储库。
为什么会出现此异常?
像我的示例中那样具有生成嵌套的sql命令的代码不是很好(在代码示例中标记为内部和外部sql)。
如何更改代码/设计以避免这种异常?
我知道我可以重写linq查询,因此这是一个有效的衬板,但是我对更通用的解决方案感兴趣。
MySql(连接器)不支持多个活动结果集(MARS)。因此,在执行外部查询(在循环迭代时运行)时,它无法通过同一连接读取其他结果集。
因此,正如您所说,重写查询就是解决方案。无论如何还是更好,因为这里有一个1 + N的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句