У меня возникла интересная проблема с EF6, и я не могу это понять. Я сталкиваюсь с случаями, когда энергичная загрузка не работает, и возвращает пустой список. Однако повторная обработка того же самого предмета будет загружена без проблем. Это затрудняет отладку, потому что я не могу воспроизвести проблему на том же элементе базы данных.
Я пробовал разные способы загрузки (как вы видите с закомментированным кодом), но, похоже, ничего не работает. В частности, я получаю список 0 для l_procedure_x_practice
context.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
context.Configuration.LazyLoadingEnabled = false;
var query = context.c_queue
.Include(x => x.l_practice)
.Include(x => x.l_procedure)
.Include(x => x.l_procedure.l_procedure_x_practice)
.Include(x => x.l_procedure.l_procedure_x_cpt_code)
.Include(x => x.l_procedure.l_procedure_x_cpt_code.Select(y => y.l_cpt_code.l_cpt_code_x_practice))
.Where(x => x.practice_code == practice.practice_code && x.processed_flag == "N")
.OrderBy(x => x.queue_key)
.Take(25)
.Select(x => x);
//query.Include(x => x.l_practice).Load();
//query.Include(x => x.l_procedure).Load();
//query.Include(x => x.l_procedure.l_procedure_x_practice).Load();
//if (practice.cpt_generated_rvu_flag == "Y")
//{
// query.Include(x => x.l_procedure.l_procedure_x_cpt_code).Load();
// query.Include(x => x.l_procedure.l_procedure_x_cpt_code.Select(y=>y.l_cpt_code.l_cpt_code_x_practice)).Load();
//}
queue = query.ToList();
context.Database.CurrentTransaction.Commit();
Журналы:
2019-06-06 10:42:13,210 [16] ERROR
Queue Key: 6694177
Practice Code: ABC
Procedure Code: 123456
Practice Null - False;
Procedure Null - False;
l_procedure_x_practice Null - False
l_procedure_x_practice - 0
Так что для вышеприведенного элемента он выдал ошибку, потому что l_procedure_x_practice был 0 (я специально проверяю это). Я установил обработанный обратно на «N», и этот элемент обработан нормально. Я подтвердил, что в таблице l_procedure_x_practice есть данные.