EF6 Проблемы с загрузкой - PullRequest
0 голосов
/ 06 июня 2019

У меня возникла интересная проблема с 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 есть данные.

...