【发布时间】:2019-07-27 23:44:24
【问题描述】:
我收到以下错误,它们都与 system.linq 有关。奇怪的是该方法有时似乎有效,错误并没有持续发生。
Count() 代码:
using (var dbContext = new Entities(GlobalStuff.EntityConnection))
{
heartBeat.NumSlipsInSecurityUploadQueue = dbContext.SecurityUploadQueues.Count();
heartBeat.NumSlipsInDataStreamQueue = dbContext.DataStreamQueues.Count();
}
SecurityUploadQueues 属性:
Public ReadOnly Property SecurityUploadQueues() As ObjectSet(Of SecurityUploadQueue)
Get
If (_SecurityUploadQueues Is Nothing) Then
_SecurityUploadQueues = MyBase.CreateObjectSet(Of SecurityUploadQueue)("SecurityUploadQueues")
End If
Return _SecurityUploadQueues
End Get
End Property
Private _SecurityUploadQueues As ObjectSet(Of SecurityUploadQueue)
SecurityUploadQueue 属性是一个实体对象
Count() 错误:
上传 HeartBeat System.InvalidOperationException 时出错:序列包含多个元素
在 System.Linq.Enumerable.Single[TSource](IEnumerable1 source) at System.Data.Objects.ELinq.ObjectQueryProvider.<>c__111.b__11_3(IEnumerable1 sequence) at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable1 查询,表达式 queryRoot)
在 System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](表达式表达式)
在 System.Linq.Queryable.Count[TSource](IQueryable`1 源)
在 SettlerService.SettlerService.UploadHeartBeat()
Any() 代码:
var dataToUpload = (from bet in dbContext.DataStreamQueues select bet).Take(200);
if (dataToUpload.Any())
Any() 错误:
System.InvalidOperationException:从一个指定的转换 将 'System.Int32' 类型具体化为 'System.Boolean' 类型不是 有效的。在 System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader
1.GetValue(DbDataReader reader, Int32 ordinal) at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator1.ReadNextElement(Shaper 整形器)在 System.Data.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable1 来源)在 System.Data.Objects.ELinq.ObjectQueryProvider.c__111.<GetElementFunction>b__11_3(IEnumerable1 序列)在 System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable1 query, Expression queryRoot) at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.Any[TSource](IQueryable1 源)
在 SettlerService.SettlerService.UploadDataStream()
我已经进行了一些谷歌搜索,但在这个问题上找不到太多信息。我认为这可能与 system.core 库的版本(system.linq 是其中的一部分)有关,但看不到问题。我正在使用.Net 4.7.2
【问题讨论】:
-
您似乎在使用实体框架。听起来您有一些 EF 映射需要查看。
-
你是对的,我们使用的是Entity Framework 5。什么映射会导致错误?
-
dbContext.SecurityUploadQueues是如何定义的? -
所以dbcontext是在数据库第一个edmx文件中定义的,SecurityUploadQueues是数据库中的一个表
-
从错误来看,
SecurityUploadQueues属性似乎是一个IQueryable,它已经包含一个Expression,它可能不直接指向DbSet<>。但是如果不显示代码就很难判断
标签: c# entity-framework linq