如何解决查询数据库EntityFrameworkCore时使用EF.Property的“ System.NullReferenceException”
社区。我正在尝试使用空间数据和PostgreSQL查询数据库。我使用NetTopologySuite。到现在为止还挺好。现在,我的模型不再使用NetTopologySuitePoint类,该类具有一种称为DistanceTo的方法,该方法在数据库中进行转换。因此,在ModelCreating中,我映射了此属性并添加了一个到Point的转换。一切都很好,我可以使用SQL命令查询数据库,但是现在,我需要使用LINQ使用EntityFrameworkCore进行查询。
要进行转换,我使用:
builder.Entity<Address>(x =>
{
x.ToTable("Addresses");
x.Property(b => b.Coordinates).HasConversion(
v => new Point(v.Latitude,v.Longitude),v => new Protos.Coordinates { Latitude = (float)v.X,Longitude = (float)v.Y });
});
当我要查询时:
await mRepository.AsQueryable<Business>()
.Include(x => x.TradeBranchs).ThenInclude(x => x.Address)
.Where(x => x.Category == category)
.Where(x => x.TradeBranchs.Any(b => EF.Property<Point>(b.Address,nameof(Address.Coordinates)).Distance(customerPoint) <= (distance / 1.609)))
.PaginateAsync(currentPage,pageSize);
在这里我使用 EF.Property
但是我不知道为什么抛出以下异常:
System.NullReferenceException: Object reference not set to an instance of an object. at Npgsql.EntityFrameworkCore.PostgreSQL.Query.ExpressionTranslators.Internal.NpgsqlGeometryMethodTranslator.TranslateGeometryMethod(SqlExpression instance,MethodInfo method,IReadOnlyList`1 arguments
at Npgsql.EntityFrameworkCore.PostgreSQL.Query.ExpressionTranslators.Internal.NpgsqlGeometryMethodTranslator.Translate(SqlExpression instance,IReadOnlyList`1 arguments,IDiagnosticsLogger`1 logger
at Microsoft.EntityFrameworkCore.Query.RelationalMethodCallTranslatorProvider.<>c__DisplayClass4_0.<Translate>b__3(IMethodCallTranslator t
at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext(
at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source,Func`2 predicate,Boolean& found
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source,Func`2 predicate
at Microsoft.EntityFrameworkCore.Query.RelationalMethodCallTranslatorProvider.Translate(IModel model,SqlExpression instance,IDiagnosticsLogger`1 logger
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at Npgsql.EntityFrameworkCore.PostgreSQL.Query.Internal.NpgsqlSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCall
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression
at Npgsql.EntityFrameworkCore.PostgreSQL.Query.Internal.NpgsqlSqlTranslatingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression
at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression
at Npgsql.EntityFrameworkCore.PostgreSQL.Query.Internal.NpgsqlSqlTranslatingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression
at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.TranslateInternal(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.Translate(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateExpression(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateLambdaExpression(ShapedQueryExpression shapedQueryExpression,LambdaExpression lambdaExpression
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateWhere(ShapedQueryExpression source,LambdaExpression predicate
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateAny(ShapedQueryExpression source,LambdaExpression predicate
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.TranslateSubquery(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at Npgsql.EntityFrameworkCore.PostgreSQL.Query.Internal.NpgsqlSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCall
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.TranslateInternal(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.Translate(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateExpression(Expression expression
at Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateLambdaExpression(ShapedQueryExpression shapedQueryExpression,LambdaExpression predicate
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression
at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node
at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query
at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query,Boolean async
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database,Expression query,IModel model,Boolean async
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0(
at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey,Func`1 compiler
at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query,CancellationToken cancellationToken
at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression,CancellationToken cancellationToken
at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetAsyncEnumerator(CancellationToken cancellationToken
at System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.GetAsyncEnumerator(
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source,CancellationToken cancellationToken
at Reddi.Backend.Manager.UserManager.GetBusinessesAsync(Address customerAddress,Double distance,BusinessCategory category,Int32 pageSize,Int32 currentPage) in /workspace/src/reddi/Backend/master/Reddi.Backend.Master/Manager/UserManager.cs:line 814
似乎在某个地方为空,但是在哪里?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。