nhibernate、postgresql和datetime.maxvalue

nhibernate、postgresql和datetime.maxvalue,nhibernate,datetime,postgresql,npgsql,Nhibernate,Datetime,Postgresql,Npgsql,我得到了一个应用程序,其中我使用DateTime.MaxValue指示一个条目尚未被删除。问题是,当日期/时间存储在postgres中时,PostgreSQL(或npgsql或nhibernate)将9999-12-31 23:59:59.999999取整为(10000-01-01 00:00) 从数据库读回该值将导致InvalidCastException 如何使nhibernate/npgsql读取这些值并将其转换为DateTime.MaxValue? 还有其他应用程序读取/写入数据库,这使

我得到了一个应用程序,其中我使用
DateTime.MaxValue
指示一个条目尚未被删除。问题是,当日期/时间存储在postgres中时,PostgreSQL(或npgsql或nhibernate)将
9999-12-31 23:59:59.999999
取整为(
10000-01-01 00:00

从数据库读回该值将导致
InvalidCastException

如何使nhibernate/npgsql读取这些值并将其转换为
DateTime.MaxValue
? 还有其他应用程序读取/写入数据库,这使得任何其他修复都不可能

*更新,完成堆栈跟踪*

NHibernate.Exceptions.GenericADOException: could not load an entity: [Gate.Users.User#1][SQL: SELECT user0_.id as id15_1_, user0_.site_id as site2_15_1_, user0_.first_name as first3_15_1_, user0_.last_name as last4_15_1_, user0_.can_delete as can5_15_1_, user0_.email as email15_1_, user0_.department as department15_1_, user0_.title as title15_1_, user0_.status as status15_1_, user0_.created_at as created10_15_1_, user0_.updated_at as updated11_15_1_, user0_.timezone as timezone15_1_, user0_.middle_names as middle13_15_1_, user0_.name_prefix as name14_15_1_, user0_.name_suffix as name15_15_1_, user0_.dob as dob15_1_, user0_.removed_at as removed17_15_1_, user0_.proxy_media as proxy18_15_1_, extension1_.id as id13_0_, extension1_.site_id as site2_13_0_, extension1_.address as address13_0_, extension1_.can_delete as can4_13_0_, extension1_.forward_all as forward5_13_0_, extension1_.forward_busy as forward6_13_0_, extension1_.forward_no_answer as forward7_13_0_, extension1_.related_type as related8_13_0_, extension1_.related_id as related9_13_0_, extension1_.e164 as e10_13_0_, extension1_.outbound_e164 as outbound11_13_0_, extension1_.custom_e164 as custom12_13_0_, extension1_.removed_at as removed13_13_0_, extension1_.number_series_id as number14_13_0_, extension1_.timeout as timeout13_0_ FROM users user0_ left outer join extensions extension1_ on user0_.id=extension1_.id WHERE user0_.id=?] ---> System.InvalidCastException: Specified cast is not valid.
   at NpgsqlTypes.NpgsqlTimeStamp.op_Implicit(NpgsqlTimeStamp timestamp)
   at NpgsqlTypes.NpgsqlTypesHelper.<TypeInfoList>b__a(Object timestamp)
   at NpgsqlTypes.NpgsqlBackendTypeInfo.ConvertToFrameworkType(Object providerValue)
   at Npgsql.ForwardsOnlyDataReader.GetValue(Int32 Index)
   at Npgsql.NpgsqlDataReader.get_Item(String name)
   at NHibernate.Driver.NHybridDataReader.get_Item(String name) in d:\CSharp\NH\nhibernate\src\NHibernate\Driver\NHybridDataReader.cs:line 207
   at Gate.Core.NHibernate.DateUserType.NullSafeGet(IDataReader rs, String[] names, Object owner) in C:\projects\c#\projects\MyProject\Server\Gate.Core.NHibernate\DateUserType.cs:line 39
   at NHibernate.Type.CustomType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner) in d:\CSharp\NH\nhibernate\src\NHibernate\Type\CustomType.cs:line 100
   at NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner) in d:\CSharp\NH\nhibernate\src\NHibernate\Type\AbstractType.cs:line 131
   at NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2505
   at NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 980
   at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 935
   at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 867
   at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 322
   at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 453
   at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 236
   at NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1392
   --- End of inner exception stack trace ---
   at NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1401
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Entity\AbstractEntityLoader.cs:line 42
   at NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Loader\Entity\AbstractEntityLoader.cs:line 37
   at NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session) in d:\CSharp\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 3436
   at NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) in d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:line 342
   at NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) in d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:line 320
   at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) in d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:line 104
   at NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) in d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:line 160
   at NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) in d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:line 87
   at NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 2457
   at NHibernate.Impl.SessionImpl.Get(String entityName, Object id) in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 1336
   at NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id) in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 1275
   at NHibernate.Impl.SessionImpl.Get[T](Object id) in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 1259
   at Gate.Core.NHibernate.Repository`2.<>c__DisplayClassd.<GetById>b__c() in C:\projects\c#\projects\MyProject\Server\Gate.Core.NHibernate\Repository.cs:line 151
   at Gate.Core.NHibernate.Repository`2.ExceptionHandling[T](Func`1 action, String failedMessage) in C:\projects\c#\projects\MyProject\Server\Gate.Core.NHibernate\Repository.cs:line 46
NHibernate.Exceptions.GenericADOException:无法加载实体:[Gate.Users.User#1][SQL:选择用户0.0.id作为id15.1.1.1.用户0.0.0.网站id作为site2.15.1.1.用户0.用户0.用户0.用户0.0.第一个名字作为Fir0.id作为Id0.id作为Id0.id作为Id0.id作为Id0.id作为Id0.id作为Id0.id作为site2.15.15.1.1.1.1.1.1.用户0.用户0.用户0.用户0.第一个名字作为Fiu0.第一个名字作为Fiu0.名字作为FiuU名字作为Fir3.名字作为Fir0.id作为Fir3.15.15.15.1.15.1.1.1.1.1.15.1.1.1.1.1.15.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.uu.在as更新11月15日11月15日11月15日1月1日更新11月15日15月15日1月1日,用户0月1日1月1日,用户0月1日。中间层的名字作为中间层13月15日15月15日1月15日1月1日更新11月15日15日15月15日1月15日15日1月1日,用户0月1日。中间层的名字作为中间层的名字作为中间层的名字作为中间层13月15月15日15日15日15月15日15月1日1日1月1月1日1月1日,用户,用户0月1日1日1日,用户0月1日,用户0月1日,用户0月1日。名字。名称。名字。名字。名字前缀前缀作为14名前缀作为14月15名前缀作为名字作为名字作为名字作为14月15月15日15日15日15日15日15日15月15月15日15日15日15日15日15月15日15日1日,扩展名1。地址作为地址13_0_,扩展1_。可以删除为can4_13_0_,扩展1_。转发为转发5_13_0,扩展1_。转发为转发忙6_13_0,扩展1_。转发为转发7_13_0,扩展1_。相关类型为related8_13_0,扩展1。相关id为related9_13_0,扩展1_,扩展1_。出站id为related9_13_0,扩展1.64_11_,extension1_uu.custom_ue164作为custom12_13_u0,extension1_u.removed作为removed13_13_u0,extension1.number_useries_uid作为number14_13_0,extension1.timeout作为timeout13_0来自用户0的超时作为用户0上的左外部联接扩展1_u.id=extension1_u.id,其中user0_13.id=?]->System.invalidException:指定的强制转换无效。
在NpgsqlTypes.npgsqltimstamp.op_隐式(npgsqltimstamp-timestamp)
在NpgsqlTypes.NpgsqlTypesHelper.b_u_a(对象时间戳)
位于NpgsqlTypes.NpgsqlBackendTypeInfo.ConvertToFrameworkType(对象提供程序值)
位于Npgsql.ForwardsOnlyDataReader.GetValue(Int32索引)
位于Npgsql.NpgsqlDataReader.get_项(字符串名称)
在NHibernate.Driver.nhybridatareader.get\u项(字符串名称)中的d:\CSharp\NH\NHibernate\src\NHibernate\Driver\nhybridatareader.cs:第207行
在C:\projects\C\#\projects\MyProject\Server\Gate.Core.NHibernate\DateUserType.NullSafeGet(IDataReader rs,字符串[]名称,对象所有者)中的Gate.Core.NHibernate\DateUserType.cs:第39行
在d:\CSharp\NH\NHibernate\src\NHibernate\Type\CustomType.NullSafeGet(IDataReader rs,字符串[]名称,ISessionImplementor会话,对象所有者)中的d:\CSharp\NHibernate\src\NHibernate\Type\CustomType.cs:100行
位于d:\CSharp\NH\NHibernate\src\NHibernate\Type\AbstractType.cs中的NHibernate.Type.AbstractType.hydroge(IDataReader rs,字符串[]名称,ISessionImplementor会话,对象所有者):第131行
在d:\CSharp\NH\NHibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs第2505行的NHibernate.Persister.Entity.AbstractEntityPersister.Hyde(IDataReader rs,Object id,Object obj,ILoadable rootLoadable,String[]后缀属性列,布尔allProperties,ISessionImplementor session)中
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader.session中的NHibernate.Loader.loadeFromResultSet(IDataReader rs,Int32 i,Object obj,String instanceClass,EntityKey,String rowIdAlias,LockMode LockMode,iAdable rootPersister,ISessionImplementor session)处
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader第935行中的NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr,Int32 i,iLoader持久化器,EntityKey,LockMode LockMode,String rowIdAlias,EntityKey optionalObjectKey,Object optionalObject,IList HydroedObject,ISessionImplementor会话)处
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader.GetRow中的NHibernate.Loader.Loader.GetRow(IDataReader rs,ILoadable[]持久化器,EntityKey[]键,Object optionalObject,EntityKey optionalObjectKey,LockMode[]lockModes,IList HydredObject,ISessionImplementor会话)中
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader第322行中的NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet,ISessionImplementor会话,QueryParameters QueryParameters,LockMode[]lockModeArray,EntityKey optionalObjectKey,IList HydredObject,EntityKey[]键,Boolean returnProxies)处
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\DoQuery(ISessionImplementor会话、QueryParameters QueryParameters、Boolean returnProxies)中的NHibernate.Loader.DoQuery(ISessionImplementor会话、QueryParameters QueryParameters、Boolean returnProxies):第453行
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader.DoQueryAndInitializeNonLazCollections(ISessionImplementor会话、QueryParameters QueryParameters、Boolean returnProxies)中的d:\CSharp\NHibernate\src\NHibernate\Loader\Loader.cs:第236行
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader.cs第1392行中的NHibernate.Loader.loadententity(ISessionImplementor会话、对象id、IType标识符类型、对象optionalObject、字符串optionalEntityName、对象optionalIdentifier、IENTypersister持久器)处
---内部异常堆栈跟踪的结束---
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Loader.cs第1401行中的NHibernate.Loader.LoadEntity(ISessionImplementor会话、对象id、IType标识符类型、对象optionalObject、字符串optionalEntityName、对象optionalIdentifier、IENTypersister persister persister)处
在d:\CSharp\NH\NHibernate\src\NHibernate\Loader\Entity\AbstractEntityLoader.Load(ISessionImplementor会话,对象id,对象optionalObject,对象optionalId)中的NHibernate.Loader
postgres=# select '9999-12-31 23:59:59.999999'::timestamp;
         timestamp          
----------------------------
 9999-12-31 23:59:59.999999
(1 row)