使用NHibernate查询'时间'字段时无效的转换异常

我有一个复杂的查询与Nhibernate使用session.CreateSQLQuery执行。 在执行期间,我得到了下一个异常:

无法投射“System.TimeSpan”类型的对象来键入“System.IConvertible”。

看来,NHibernate不能正确处理字段类型的'时间',并期望在那里的整数值。 对于使用xml映射文件映射的实体,它可以正常使用HQL查询。 但在我的情况下,我需要运行一个SQL查询,所以无法指定映射。 任何想法如何解决它? 看起来像一个NHibernate的错误。

NHibernate版本:3.3.1.4

以下是完整的堆栈跟踪:

无法投射“System.TimeSpan”类型的对象来键入“System.IConvertible”。 在System.Convert.ToInt64(对象值)
NHibernate.Type.TimeSpanType.Get(IDataReader rs,Int32 index)in p: nhibernate-core src NHibernate Type TimeSpanType.cs:line 32内部异常:输入字符串'08:00:00'不在正确的格式。
在NHibernate.Type.NullableType.NullSafeGet(IDataReader rs,String name)中的第36行:NHibernate.Type.TimeSpanType.Get(IDataReader rs,Int32 index)在p: nhibernate-core src NHibernate Type TimeSpanType.cs中:在p: nhibernate-core src NHibernate Type NullableType.cs中:第253行
NHibernate.Loader.Custom.CustomLoader.ScalarResultColumnProcessor.Extract(Object [] data,IDataReader resultSet,ISessionImplementor session)在NHibernate.Loader的第458行:p: nhibernate-core src NHibernate Loader Custom CustomLoader.cs:在NHibernate.Loader中的第395行:.Custom.CustomLoader.ResultRowProcessor.BuildResultRow(Object [] data,IDataReader resultSet,布尔hasTransformer,ISessionImplementor会话)在p: nhibernate-core src NHibernate Loader Custom CustomLoader.cs中:第395行。 Loader.DoQuery(ISessionImplementor会话,QueryParameters queryParameters,布尔returnProxies)的对: NHibernate的核 SRC NHibernate的装载机 Loader.cs:线473在NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor会话,QueryParameters queryParameters,布尔returnProxies )在p: nhibernate-core src NHibernate Loader Loader.cs中:第251行在NHibernate.Loader.Loader.DoList(ISessionImplementor会话中,QueryParameters queryParameters)在p: nhibernate-core src NHibernate Loade r Loader.cs:第1564行无法在p: nhibernate-core src NHibernate Loader Loader.cs中的NHibernate.Loader.Loader.DoList(ISessionImplementor会话,QueryParameters queryParameters)执行查询[查询]:第1573行NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session,QueryParameters queryParameters)在NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery,QueryParameters queryParameters, IList结果)在p: nhibernate-core src NHibernate Impl SessionImpl.cs中:第2104行在NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec,QueryParameters queryParameters,IList结果)在p: nhibernate-core src NHibernate Impl SessionImpl.cs:line 2091 at NHibernate.Impl.SessionImpl.List [T](NativeSQLQuerySpecification spec,QueryParameters queryParameters)in p: nhibernate-core src NHibernate Impl SessionImpl.cs:line 2078 at NHibernate.Impl.SqlQueryImpl.ListT在p: nhibernate-core src NHibernate Impl SqlQueryImpl.cs:第160行

更新:这是简单的代码,可以帮助重现问题。 TimeValue在sql server中有'time(0)null'类型。

ISession session = TransactionScopeManager.Instance.GetSession();
iQuery = session.CreateSQLQuery("select TimeValue from TestTable");
result =  iQuery.List();
链接地址: http://www.djcxy.com/p/71063.html

上一篇: Invalid cast exception while querying 'time' field with NHibernate

下一篇: Can't Cast to String Even With Operator Overloaded