Sql server 查询'时发生无效的强制转换异常;时间';NHibernate字段

Sql server 查询'时发生无效的强制转换异常;时间';NHibernate字段,sql-server,nhibernate,Sql Server,Nhibernate,我使用session.CreateSQLQuery使用Nhibernate执行了一个复杂的查询。 在执行过程中,我遇到了下一个例外: 无法将“System.TimeSpan”类型的对象强制转换为“System.IConvertible”类型 NHibernate似乎无法正确处理字段类型“time”,并希望在这里使用整数值。它可以在使用xml映射文件映射的实体上进行常规HQL查询。然而,在我的例子中,我需要运行sql查询,因此无法指定映射。有没有办法解决这个问题?看起来像一只NHibernate虫

我使用session.CreateSQLQuery使用Nhibernate执行了一个复杂的查询。 在执行过程中,我遇到了下一个例外:

无法将“System.TimeSpan”类型的对象强制转换为“System.IConvertible”类型

NHibernate似乎无法正确处理字段类型“time”,并希望在这里使用整数值。它可以在使用xml映射文件映射的实体上进行常规HQL查询。然而,在我的例子中,我需要运行sql查询,因此无法指定映射。有没有办法解决这个问题?看起来像一只NHibernate虫子

NHibernate verison:3.3.1.4

以下是完整的堆栈跟踪:

无法将“System.TimeSpan”类型的对象强制转换为 “System.IConvertible”。在System.Convert.ToInt64(对象值)
在中的NHibernate.Type.TimeSpanType.Get(IDataReader rs,Int32索引)处 p:\nhibernate core\src\nhibernate\Type\TimeSpanType.cs:第32行 异常:输入字符串“08:00:00”的格式不正确。
在中的NHibernate.Type.TimeSpanType.Get(IDataReader rs,Int32索引)处 p:\nhibernate core\src\nhibernate\Type\TimeSpanType.cs:at的第36行 NHibernate.Type.NullableType.NullSafeGet(IDataReader rs,字符串名) 在p:\nhibernate core\src\nhibernate\Type\NullableType.cs中:第253行
在 NHibernate.Loader.Custom.CustomLoader.ScalarResultColumnProcessor.Extract(对象[]) 数据、IDataReader结果集、ISessionImplementor会话)中的 p:\nhibernate core\src\nhibernate\Loader\Custom\CustomLoader.cs:line 458 at NHibernate.Loader.Custom.CustomLoader.ResultRowProcessor.BuildResultRow(对象[]) 数据,IDataReader结果集,布尔hasTransformer, 中的ISessionImplementor会话) p:\nhibernate core\src\nhibernate\Loader\Custom\CustomLoader.cs:line 395位于NHibernate.Loader.Loader.DoQuery(ISessionImplementor 会话,QueryParameters QueryParameters,Boolean returnProxies)中的 p:\nhibernate core\src\nhibernate\Loader\Loader.cs:第473行 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor 会话,QueryParameters QueryParameters,Boolean returnProxies)中的 p:\nhibernate core\src\nhibernate\Loader\Loader.cs:at的第251行 NHibernate.Loader.Loader.DoList(ISessionImplementor会话, 查询参数(查询参数)中的查询参数 p:\nhibernate core\src\nhibernate\Loader\Loader.cs:第1564行无法执行 在上执行查询[query] NHibernate.Loader.Loader.DoList(ISessionImplementor会话, 查询参数(查询参数)中的查询参数 p:\nhibernate core\src\nhibernate\Loader\Loader.cs:at的第1573行 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor 会话,查询参数(查询参数)中的 p:\nhibernate core\src\nhibernate\Loader\Loader.cs:at的第1472行 NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, 查询参数查询参数,IList结果)输入 p:\nhibernate core\src\nhibernate\Impl\SessionImpl.cs:第2104行 NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification, 查询参数查询参数,IList结果)输入 p:\nhibernate core\src\nhibernate\Impl\SessionImpl.cs:at的第2091行 NHibernate.Impl.SessionImpl.List[T](NativeSQLQuerySpecification, 查询参数(查询参数)中的查询参数 p:\nhibernate core\src\nhibernate\Impl\SessionImpl.cs:第2078行 中的NHibernate.Impl.SqlQueryImpl.ListT p:\nhibernate core\src\nhibernate\Impl\SqlQueryImpl.cs:第160行

更新: 下面是帮助重现问题的简单代码。TimeValue在sql server中具有“时间(0)null”类型

ISession session = TransactionScopeManager.Instance.GetSession();
iQuery = session.CreateSQLQuery("select TimeValue from TestTable");
result =  iQuery.List();

我遇到了同样的错误。我使用的一个临时解决方案是首先将“Time”强制转换为“Varchar”,然后在代码中将字符串解析为“TimeSpan”类型

iQuery = session.CreateSQLQuery("select cast(TimeValue as varchar) as TimeStr from TestTable");
result =  iQuery.List();

也许错误就在你的代码里?我们无法判断,因为您没有显示映射和查询。:)因为我使用的是sql查询,所以不涉及映射。但是我添加了代码来演示这个问题