#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 ничего не происходит.