使用FirstOrDefault仍抛出Sequence contains no elements异常(EF Core 8)
EF Core 8 SqlQueryRaw执行异常排查
问题场景
DataSourceM和DataDeliveryM均为标记了[NotMapped]特性的普通类(无虚拟方法),所有公共属性均有默认值。执行以下代码时,Query1可成功获取结果,但Query2调用.FirstOrDefault()时始终抛出异常:
using (ApplicationDbContext context = new()) { foreach (ConfigurationSimple config in result) { //Query1 DataSourceM sdResult = context.Database.SqlQueryRaw<DataSourceM>( @"SELECT Id, BucketName, Root FROM DataSource where Id = @p0", config.DataSourceId).FirstOrDefault(); //Query2 DataDeliveryM ddlResult = context.Database.SqlQueryRaw<DataDeliveryM>( @"SELECT DataDeliveryTypeId, FromDirectAddress, ToDirectAddress, BucketName, Folder FROM DataDelivery WHERE Id = @p0 AND vendorID = @p1", config.DataDeliveryId, config.VendorId).FirstOrDefault(); } }
异常信息
System.InvalidOperationException HResult=0x80131509 Message=Sequence contains no elements Source=System.Linq StackTrace: at System.Linq.ThrowHelper.ThrowNoElementsException() at System.Linq.Enumerable.MinMaxInteger[T,TMinMax](IEnumerable`1 source) at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression) at System.Dynamic.Utils.ExpressionVisitorUtils.VisitBlockExpressions(ExpressionVisitor visitor, BlockExpression block) at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node) at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.VisitExtension(Expression extensionExpression) at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.ProcessShaper(Expression shaperExpression, RelationalCommandCache& relationalCommandCache, IReadOnlyList`1& readerColumns, LambdaExpression& relatedDataLoaders, Int32& collectionId) at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.VisitShapedQuery(ShapedQueryExpression shapedQueryExpression) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.VisitExtension(Expression extensionExpression) at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.VisitExtension(Expression extensionExpression) 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__DisplayClass9_0`1.<Execute>b__0() at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
环境与排查情况
- 技术栈:.NET 8 + Entity Framework Core 8.0.8
- 数据库验证:通过MySQL Workbench执行Query2对应的SQL语句,可正常返回0至多条记录,但代码中无论传入什么参数都会抛出上述异常
- 历史解决尝试:此前Query1曾出现相同异常,将结果类从
DataSourceModel改名为DataSourceM后问题解决,但该方法对Query2无效
更新:问题根源
此前错误理解了[NotMapped]特性的作用:该特性表示属性或类应排除在数据库映射之外,并非“结果集中可以缺少该属性”。
内容的提问来源于stack exchange,提问作者Peter S
相关产品推荐
相关产品推荐

