আমি সত্তা ফ্রেমওয়ার্ক ব্যবহার করছি এবং মাঝে মাঝে আমি এই ত্রুটিটি পেয়ে যাব।
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());
}
প্রতিবার নতুন সংযোগ খোলার জন্য ডিসপোজ প্যাটার্ন ব্যবহার করে।
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());
}
}
এখনও সমস্যাযুক্ত
ইএফ যদি সংযোগটি ইতিমধ্যে খোলা থাকে তবে এটি পুনরায় ব্যবহার করবে না।
predicate
এবংhistoricPredicate
ভেরিয়েবলগুলি কী প্রকার তা জানতে আগ্রহী । আমি আবিষ্কার করেছি যে আপনি যদি এটি পাসFunc<T, bool>
করেন তবেWhere()
এটি সংকলন এবং কখনও কখনও কাজ করবে (কারণ এটি স্মৃতিতে "যেখানে" থাকে)। আপনি কি উচিত কাজ করা ক্ষণস্থায়ী হয়Expression<Func<T, bool>>
থেকেWhere()
।