今天,測試一個項目的時候,拋出了這個莫名其妙的異常,然後就開始了一天的調試之旅... 花了很長時間,沒有從代碼找出任何問題... 那麼到底哪裡出問題呢? 根據下麵那段長長的錯誤日誌: 上百度,上谷歌... 有人說會不會是Lazy載入的問題,說他試過設置Lazy=false就不會出現這個問題了???納 ...
今天,測試一個項目的時候,拋出了這個莫名其妙的異常,然後就開始了一天的調試之旅... 花了很長時間,沒有從代碼找出任何問題... 那麼到底哪裡出問題呢? 根據下麵那段長長的錯誤日誌:
2017-01-06 17:07:03,680 [19] XxxXxxxx.Web.Mvc.Controllers.WarningController - UnhandleError guest /master/poitem NHibernate.Exceptions.GenericADOException: could not load an entity: [XxxXxxxx.Model.Format#50][SQL: /* load XxxXxxxx.Model.Format */ SELECT format0_.id as id1_4_0_, format0_.nh_version as nh2_4_0_, format0_.category_id as catego3_4_0_, format0_.name as name4_4_0_, format0_.display_name as displa5_4_0_, format0_.path as path6_4_0_, format0_.preview_image as previe7_4_0_, format0_.code as code8_4_0_, format0_.type as type9_4_0_, format0_.created_id as creat10_4_0_, format0_.created_time as creat11_4_0_, format0_.modified_id as modif12_4_0_, format0_.modified_time as modif13_4_0_ FROM wp_format format0_ WHERE format0_.id=?] ---> System.InvalidCastException: Can't convert infinite timestamp values to DateTime 在 Npgsql.NpgsqlDataReader.GetValue(Int32 ordinal) 在 Npgsql.NpgsqlDataReader.get_Item(Int32 ordinal) 在 NHibernate.Driver.NHybridDataReader.System.Data.IDataRecord.get_Item(Int32 i) 在 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) 在 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner) 在 NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session) 在 NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session) 在 NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) 在 NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) 在 NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) --- 內部異常堆棧跟蹤的結尾 --- 在 NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) 在 NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId) 在 NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session) 在 NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) 在 NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) 在 NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) 在 NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) 在 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) 在 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) 在 NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object id, Boolean eager, Boolean isNullable) 在 NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session) 在 NHibernate.Type.EntityType.ResolveIdentifier(Object value, ISessionImplementor session, Object owner) 在 NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent, PostLoadEvent postLoadEvent) 在 NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean readOnly) 在 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters, IResultTransformer forcedResultTransformer) 在 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) 在 NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) 在 NHibernate.Loader.Hql.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) 在 NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) 在 NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) 在 NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) 在 NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters) 在 NHibernate.Impl.AbstractQueryImpl2.List() 在 NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) 在 NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression) 在 NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression) 在 Remotion.Linq.QueryableBase`1.GetEnumerator() 在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 在 XxxXxxxx.Model.Helper.PagedList`1..ctor(IQueryable`1 source, Int32 pageIndex, Int32 pageSize) 在 XxxXxxxx.Model.Helper.PaginationHepler.ToPagedList[T](IQueryable`1 source, Int32 pageIndex) 在 XxxXxxxx.Web.Mvc.Areas.Master.Controllers.PoItemSetupController.List(String ticketType, String brand, String productType, String createtimefrom, String createtimeto, String XxxXxxxx, Int32 page) 在 lambda_method(Closure , ControllerBase , Object[] ) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
上百度,上谷歌...
有人說會不會是Lazy載入的問題,說他試過設置Lazy=false就不會出現這個問題了???納尼?我來個黑人三問號!這和Lazy載入有什麼八桿子關係?
有人說POJO文件和XML文件以及資料庫表之間的映射出了問題???這...我表示之前沒有做過任何改動,而且之前運行得好好的,不應該有這樣的問題。再說了,泥煤,我這是C#程式,表跟我提POJO好嗎?
也有人說看了下異常信息,是SQL的問題!!辣麽肯定是SQL的問題???好吧,我剛開始也感覺像是SQL的問題,然而我把SQL貼到資料庫SQL執行器里執行,並沒有問題。更何況我這程式上下全是Linq,Linq代碼也會產生這種問題嗎?不至於吧...
好吧好吧,後來,我又看了下異常信息,發現有個提示"Can't convert infinite timestamp values to DateTime"...
這是轉換失敗的意思麽?
難道是資料庫出了問題?
沒有人動資料庫呀?
打開對應的wp_format表,看了下時間類型的欄位,傻眼了!!!
為什麼其中一個時間欄位,裡面的值全是-inxxxxxx這樣的東西,之所以寫xxxxx,是因為我改正後忘記單詞了,嘿嘿...
而其它時間欄位都是"yyyy-mm-dd hh:mm:ss"格式的值。
於是我嘗試把錯誤的值,通過update更新為系統當前時間。
再次調試,終於不會出錯了。
但是我不死心,我想要知道為什麼會出現這樣的問題?
要是找不出來的話,這很黑盒。。。
我嘗試手工改動正常的值為非正常的值,比如把"yyyy-mm-dd hh:mm:ss"格式的值,改成-inxxxxxx這樣的東西,但是提示值非法,不允許修改...
這個提示,我想也是對的,畢竟欄位類型是timestamp,當然只能填時間,不能填其它亂七八糟的東西了。。
哪到底是什麼原因出來的呢?
沒搞懂...
放棄之,寫個文章標記一下。