NullReferenceException в EF Core при использовании перегрузки StringComparison для предикатов - PullRequest
0 голосов
/ 03 апреля 2019

Мы преобразуем проект из EF в EF Core.У нас есть следующая строка кода, которая работала, но сейчас не работает:

// throws NullReferenceException
var u = db.Users.FirstOrDefault(x => x.PresenterID.Equals(uid, StringComparison.OrdinalIgnoreCase));

Однако, если мы не используем перегрузку StringComparison, она работает:

// this works
var u = db.Users.FirstOrDefault(x => x.PresenterID.Equals(uid));

Это большой проект, и мы хотели бы избежать поиска и изменения всего кода, который выполняет такие сравнения.Почему это вызывает исключение NullReferencException и его можно избежать без изменения нашего кода?Вот трассировка стека.Спасибо.

в lambda_method (закрытие, пользователь) в System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 1 источник)
в Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnume2.MoveNext () в Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext() at System.Linq.Enumerable.First[TSource](IEnumerable 1 источник) в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler. <> C__DisplayClass15_1`1.Conxt. Qject.Service.ContractsFolderService.ValidateContractUsers (BIContract xmlContract, IDataContext db) в C: \ Projects \ Out.Project \ Main \ Service \ ContractsFolderService.cs: строка 436

1 Ответ

1 голос
/ 03 апреля 2019

Согласно этой открытой проблеме в репозитории EntityFrameworkCore Github, эта перегрузка еще не поддерживается с LINQ to SQL.Смотрите этот конкретный комментарий, который дает некоторые подробности о проблеме, препятствующей переводу этой перегрузки: https://github.com/aspnet/EntityFrameworkCore/issues/1222#issuecomment-443116169

Я предполагаю, что исключение нулевой ссылки происходит, потому что оно возвращает все результаты для оценки сравнения строк.на стороне клиента, и для одного или нескольких из этих результатов PresenterID равно нулю.

...