我们正在将项目从使用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(Closure,User)在 System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1源)
在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnumerable1.GetEnumerator() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__17
2.MoveNext() 在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext() at System.Linq.Enumerable.First[TSource](IEnumerable
1来源) Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler。<> c__DisplayClass15_1`1.b__0(QueryContext qc) Our.Project.Service.ContractsFolderService.ValidateContractUsers(BIContract xmlContract,IDataContext db)中 C:\ Projects \ Out.Project \ Main \ Service \ ContractsFolderService.cs:line 436
答案 0 :(得分:1)
根据EntityFrameworkCore Github存储库上的this open issue,LINQ to SQL尚不支持重载。请参阅以下特定评论,其中提供了有关防止翻译此重载的问题的详细信息:https://github.com/aspnet/EntityFrameworkCore/issues/1222#issuecomment-443116169
我猜测是发生了空引用异常,因为它会拉回所有结果以在客户端评估您的字符串比较,并且对于其中一个或多个结果PresenterID
为空。