【问题标题】:NullReferenceException in EF Core when using StringComparison overload for predicates对谓词使用 StringComparison 重载时,EF Core 中出现 NullReferenceException
【发布时间】:2019-08-25 04:17:00
【问题描述】:

我们正在将项目从使用 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 ) at System.Linq.Enumerable.WhereEnumerableIterator1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 来源)
在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnumerable1.GetEnumerator() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__172.MoveNext() 在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext() at System.Linq.Enumerable.First[TSource](IEnumerable1 来源)在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c__DisplayClass15_1`1.b__0(QueryContext 质量控制)在 Our.Project.Service.ContractsFolderService.ValidateContractUsers(BIContract xmlContract, IDataContext db) 在 C:\Projects\Out.Project\Main\Service\ContractsFolderService.cs:line 436

【问题讨论】:

    标签: c# entity-framework linq entity-framework-core


    【解决方案1】:

    根据 EntityFrameworkCore Github 存储库中的this open issue,LINQ to SQL 尚不支持该重载。请参阅此特定评论,其中详细介绍了阻止翻译此重载的问题:https://github.com/aspnet/EntityFrameworkCore/issues/1222#issuecomment-443116169

    我猜测空引用异常正在发生,因为它拉回所有结果以在客户端评估您的字符串比较,并且对于这些结果中的一个或多个PresenterID 为空。

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多