Цепочка, в которой вызывается Исключение Нулевой Ссылки

#c# #entity-framework #entity-framework-plus

Вопрос:

У меня проблема с Entity Framework Plus. Ctx работает, ctx2 работает, но когда я выполняю ctx3, я получаю : System.NullReferenceException: Ссылка на объект не установлена на экземпляр объекта. Есть идеи, что я могу сделать не так ? GetQueryableContext был уменьшен до _context.Set.

Спасибо.

 var ctx = await GetQueryableContext(request);
ctx = ctx.Where(x => x.DepotNo >= request.DepotNo);
ctx.Update(x => new Order() { LorryLoadingListPrinted = 1111 });

var ctx2 = await GetQueryableContext(request);
ctx2 = ctx2.Where(x => x.DepotNo <= request.DepotNo);
ctx2.Update(x => new Order() { LorryLoadingListPrinted = 2222 });

var ctx3 = await GetQueryableContext(request);
ctx3 = ctx3.Where(x => x.DepotNo >= request.DepotNo).Where(x => x.DepotNo <= request.DepotNo);
ctx3.Update(x => new Order() { LorryLoadingListPrinted = 3333 });
 

Комментарии:

1. Какое значение ctx3 имеет отладчик?

2. Похоже, что ваши два последовательных .Where(...) вызова могут быть просто заменены одним: ctx3.Where(x => x.DepotNo == request.DepotNo)

3. @Vladimir да, это может быть, но я хочу, чтобы это было так для вашего вопроса. Обычно «GetQueryanleContext» возвращает довольно много цепочек, основанных на запросе, но, поскольку у меня возникла проблема, я хотел сузить ее. Приведенный ниже код также работает: var ctx4 = ожидание GetQueryableContext(запрос); ctx4 = ctx4.Где(x => x.ДепотНо > ДепотНо amp;amp; x.ДепотНо >= запрос. ДепотНо); ctx4.Обновление(x => новый заказ() { Список загружаемых грузов = 2222 });

4. .Where() никогда не возвращается null , если у поставщика LINQ нет ошибки в его реализации; предполагается, что он всегда возвращает не- null IEnumerable (даже если этот перечисляемый элемент может не содержать элементов). Либо это так, либо происходит что-то неясное, например request.DepotNo , изменение или прерывание между вызовами (или, возможно, но маловероятно, что выполнение запроса каким-то образом приводит к null созданию записей, хотя это также должно быть ошибкой). Внимательно посмотрите на трассировку стека, чтобы увидеть, где создается NRE.

5. @JeroenMostert перед публикацией здесь я сократил код до того, что вы видите, так что с DepotNo ничего не происходит.