实体框架6.1.3:运行几天

时间:2017-01-24 22:01:39

标签: c# .net entity-framework windows-services

我有一个奇怪的问题。我有一个Windows服务。超过100台计算机上的服务运行良好。但是在几天(甚至一个月)之后,它们开始抛出这样的例外:

  

System.InvalidOperationException:' X'属于' Y'无法设置为System.String'值。您必须将此属性设置为类型为' System.Int32'的非空值。

     System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader,Int32 ordinal)中的

  
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling [TProperty](Int32 ordinal,String propertyName,String typeName)
  
在lambda_method(Closure,Shaper)中   
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly [TEntity](Func`2 constructEntityDelegate,EntityKey entityKey,EntitySet entitySet)
  
在lambda_method(Closure,Shaper)中   
在System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(整形器)中   
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()中   
在System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable`1 source)
  
在System.Linq.Queryable.FirstOrDefault [TSource](IQueryable`1 source)

数据库结构中的代码没有任何修改。在一些地方抛出异常。其他应用程序(不是Windows服务)使用相同的数据库正常运行。因为我可以检查一些查询运行正常,只有少数几个抛出此异常。类型多种多样。有时它不能从字符串转换为int32,有时(在其他查询中)它不能从int32转换为字符串。

要解决此问题,我们必须重新启动Windows服务。

我没有任何记忆问题(我的第一个嫌疑人)。服务使用大约100-150MB的内存。

环境:Framework 4.0,EF 6.1.3,64位,SQL Server 2012 Express。

1 个答案:

答案 0 :(得分:0)

似乎需要在此处进行很多日志记录工作。我的建议是,首先调试案例并在代码抛出异常的每个位置写入日志。

为预防起见,请尝试尽最大可能地检查对象中的属性是否可转换-使用int.TryParse

if(int.TryParse(X, out intVar) 
{
}
else
{
   //failed to convert  
}

还请尝试尝试catch并使用确切的堆栈跟踪发出日志错误,这对于字符串异常是更可取的,因为您不能对字符串属性进行尝试解析。

这里没有简单的方法,您将需要逐一挖掘。