"转换为值类型'布尔'失败,因为物化值为空"什么都不是

时间:2015-10-11 23:45:52

标签: c# entity-framework

我有这条线

if (EF.ctx.Searches.Any(x => x.SearchTerm == _searchTerm && x.IpAddress == ip && x.Time > dtRecent))

随机抛出此错误(很少,不可重现)

  

演员价值类型'布尔'失败,因为具体化值为null。结果类型的通用参数或查询必须使用可空类型。

在数据库中,只有IpAddress可以为空(但到目前为止,没有带有空IpAddress的记录)。
每次抛出错误时,都没有变量为空。

最接近的类似问题是Queryable.Any() returning null?
但是这个错误对我来说仍然没有意义。

我真的很好奇,那条线上的 null 究竟是什么?

堆栈跟踪:

  

at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader 1.GetValue(DbDataReader reader, Int32 ordinal) at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator 1.ReadNextElement(Shaper shaper)       在System.Data.Common.Internal.Materialization.Shaper 1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable 1来源)       在System.Data.Objects.ELinq.ObjectQueryProvider.b__3 [TResult](IEnumerable 1 sequence) at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable 1查询,表达式queryRoot)       在System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute [S](表达式表达式)       在System.Linq.Queryable.Any [TSource](IQueryable 1 source, Expression 1谓词)       在[我的代码,上面的行]

2 个答案:

答案 0 :(得分:0)

我认为不是导致此错误的表内容,而是查询中的一个变量:_searchTermipdtRecent必须具有无效值且无法转换为有效的sql查询或查询包含无效值。

将记录附加到Database.Log并检查EF创建的查询:

using (var context = new YourContext()) 
{ 
    context.Database.Log = Console.Write; 

    // Your code here... 
}

您可以在Logging and Intercepting Database Operations

上找到更多信息

答案 1 :(得分:-1)

在我的情况下,就像数据库有一些变化,所以我们清理了一些表,就是这样。

我的意思是修改你的数据库。