我有一个抛出异常的简单查询(见下文)。
- myTable* 表具有类型为Time的列,nHibernate尝试通过Int64将该列转换为TimeSpan。
我看到在使用Map时有TimeAsTimeSpan约定。
但我没有任何Map。
那么,不使用Map如何实现呢?
我的代码
string sqlText = "Select * from myTable";
ISQLQuery query = Session.CreateSQLQuery(sqlText);
query.List(); // <-- fails with exception
引发了异常
NHibernate.Exceptions.GenericADOException: could not execute query
System.FormatException: Input string '10:01:40' was not in the correct format. ---> System.InvalidCastException: Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'.
at System.Convert.ToInt64(Object value)
at NHibernate.Type.TimeSpanType.Get(DbDataReader rs, Int32 index, ISessionImplementor session)
--- End of inner exception stack trace ---
at NHibernate.Type.TimeSpanType.Get(DbDataReader rs, Int32 index, ISessionImplementor session)
at NHibernate.Type.NullableType.NullSafeGet(DbDataReader rs, String name, ISessionImplementor session)
at NHibernate.Loader.Custom.CustomLoader.ScalarResultColumnProcessor.Extract(Object[] data, DbDataReader resultSet, ISessionImplementor session)
at NHibernate.Loader.Custom.CustomLoader.ResultRowProcessor.ExtractResultRow(Object[] data, DbDataReader resultSet, ISessionImplementor session)
at NHibernate.Loader.Custom.CustomLoader.ResultRowProcessor.BuildResultRow(Object[] data, DbDataReader resultSet, Boolean hasTransformer, ISessionImplementor session)
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies, IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters, IResultTransformer forcedResultTransformer)
**安装程序:**nhib5.2,.net 4.6.2,数据库为Db2
1条答案
按热度按时间g2ieeal71#
我们找到了解决这个问题的方法,所以如果有人有同样的问题。这里是解决方法。
必须将类型作为TimeAsTimeSpanType注册到类型工厂
就像这样: