我正在使用Entity Framework,偶尔会遇到这个错误。
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
即使我没有进行任何手动连接管理,但这个错误会时有发生。
触发此错误的代码(为了便于阅读而缩短):
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
使用Dispose模式以便每次都打开新连接。
using (_tEntitites = new TEntities(GetEntityConnection())) {
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
}
仍然存在问题
如果连接已经打开,为什么EF不会重用它呢?
Func<T, bool>
传递给Where()
,它会编译并且有时会工作(因为它在内存中执行“where”)。你应该传递Expression<Func<T, bool>>
给Where()
。 - James