Saya menggunakan Entity Framework dan kadang-kadang saya akan mendapatkan kesalahan ini.
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
Meskipun saya tidak melakukan manajemen koneksi manual.
kesalahan ini terjadi sesekali.
kode yang memicu kesalahan (disingkat agar mudah dibaca):
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
menggunakan pola Buang untuk membuka koneksi baru setiap kali.
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());
}
}
masih bermasalah
mengapa EF tidak akan menggunakan kembali koneksi jika sudah terbuka.
predicate
danhistoricPredicate
variabel Anda. Saya telah menemukan bahwa jika Anda lulusFunc<T, bool>
untukWhere()
itu akan mengkompilasi dan kadang-kadang bekerja (karena melakukan "di mana" dalam memori). Apa yang Anda harus lakukan adalah lewatExpression<Func<T, bool>>
untukWhere()
.