NHibernate – 无法执行查询 – 输入字符串的格式不正确

我一直在用这个问题摸不着头脑,我对于什么是错的一无所知。

概述:我在MySQL数据库中有两个表。 两者都正确映射到数据库(我可以加载数据),我可以查询到一个表,但不能查询另一个表。

我已经研究过的解决方案:在表和C#代码之间键入转换问题,映射问题,SQL格式问题。

失败的代码如下:

Configuration config = new Configuration(); config.Configure(); ISessionFactory sessionFactory = config.BuildSessionFactory(); var schema = new SchemaUpdate(config); schema.Execute(true, true); results = session.CreateSQLQuery("SELECT * FROM Stats_Table") // Exception thrown here .AddEntity(typeof(TestStats)) .List(); 

class级:

 public class Stats { public virtual Guid Id { get; set; } public virtual Guid TestId { get; set; } public virtual String Name { get; set; } public virtual TResult Result { get; set; } public virtual DateTime? Timestamp { get; set; } public virtual UInt32 Duration { get; set; } public virtual String Notes { get; set; } public Stats() { } public Stats(TestCase tc, TResult Res, DateTime? Time, UInt32 Dura, String ResultNote="") { Id = Guid.NewGuid(); TestId = tc.Id; Name = tc.TestName; Result = Res; Timestamp = Time; Duration = Dura; Notes = ResultNote; } public Stats(Guid T_Id, string Name, TResult Res, DateTime? Time, UInt32 Dura, String ResultNote="") { Id = Guid.NewGuid(); TestId = T_Id; Name = Name; Result = Res; Timestamp = Time; Duration = Dura; Notes = ResultNote; } } 

映射文件:

               

我得到一个NHibernate GenericADOException:“无法执行查询\ r \ n [SELECT * FROM Stats_Table] \ r \ n [SQL:SELECT * FROM Stats_Table]”

使用InnerException:“输入字符串的格式不正确。”


堆栈跟踪:

在System.String.System.IConvertible.ToInt32(IFormatProvider)的System.Number.ParseInt32(String s,NumberStyles样式,NumberFormatInfo信息)处的System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer&number,NumberFormatInfo info,Boolean parseDecimal)提供者)at System.Convert.ToInt32(对象值)at NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert(Object input)in p:\ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs:line 88 at NHibernate.Type .PersistentEnumType.AbstractEnumConverter`1.ToObject(Type enumClass,Object code)在p:\ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs:第33行,位于p:中的NHibernate.Type.PersistentEnumType.GetInstance(Object code) \ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs:位于p:\ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs中的NHibernate.Type.PersistentEnumType.Get(IDataReader rs,Int32 index)的第203行: NHibernate.Type.NullableType.NullSafeGet的第189行(IDataReader rs,String 名称)在p:\ nhibernate-core \ src \ NHibernate \ Type \ NullableType.cs:第253页的NHibernate.Type.NullableType.NullSafeGet(IDataReader rs,String []名称,ISessionImplementor会话,对象所有者)在p:\ nhibernate中-core \ src \ NHibernate \ Type \ NullableType.cs:第195行,位于p:\ nhibernate-core \ src \ NHibernate \中的NHibernate.Type.AbstractType.Hydrate(IDataReader rs,String []名称,ISessionImplementor会话,对象所有者)输入\ AbstractType.cs:第131行,位于p:\ nhibernate-的NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs,Object id,Object obj,ILoadable rootLoadable,String [] [] suffixedPropertyColumns,Boolean allProperties,ISessionImplementor session) core \ src \ NHibernate \ Persister \ Entity \ AbstractEntityPersister.cs:NHibernate.Loader.Loader.LoadFromResultSet中的第2518行(IDataReader rs,Int32 i,Object obj,String instanceClass,EntityKey key,String rowIdAlias,LockMode lockMode,ILoadable rootPersister,ISessionImplementor会话)在p:\ nhibernate-core \ src \ NHibernate \ Load中 er \ Loader.cs:第9行: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 p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:NHibernate.Loader.Loader.GetRow的第944行(IDataReader rs,ILoadable [] persisters,EntityKey [] keys,Object optionalObject,EntityKey optionalObjectKey,LockMode [] lockModes, IList hydratedObjects,ISessionImplementor session)在p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:第876行NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet,ISessionImplementor session,QueryParameters queryParameters,LockMode [] lockModeArray,EntityKey optionalObjectKey,IList hydratedObjects,EntityKey [] keys,Boolean returnProxies)在p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:第342行,位于NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,Q ueryParameters queryParameters,Boolean returnProxies)在p:\ nhibernate中的NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session,QueryParameters queryParameters,Boolean returnProxies)中的p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:第473行 – core \ src \ NHibernate \ Loader \ Loader.cs:位于p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs的NHibernate.Loader.Loader.DoList(ISessionImplementor session,QueryParameters queryParameters)的第251行:第1564行


来自NHibernate:

在NHibernate.Loader.Loader.DoList(ISessionImplementor session,QueryParameters queryParameters)的p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:第1573行NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session,QueryParameters queryParameters)在p:\ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs:第1472行的NHibernate.Loader.Loader.List(ISessionImplementor session,QueryParameters queryParameters,ISet`1 querySpaces,IType [] resultTypes)in p:\ nhibernate -core \ src \ NHibernate \ Loader \ Loader.cs:第1467行,位于p:\ nhibernate-core \ src \ NHibernate \ Loader \ Custom \ CustomLoader中的NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session,QueryParameters queryParameters)。 cs:NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery,QueryParameters queryParameters,IList results)中的第276行,位于p:\ nhibernate-core \ src \ NHibernate \ Impl \ SessionImpl.cs:NHibernate.Impl.SessionImpl.List中的第2108行(NativeSQLQuerySpecification规范,QueryParameters queryP 参数,IList结果)在p:\ nhibernate-core \ src \ NHibernate \ Impl \ SessionImpl.cs:第2091行的NHibernate.Impl.SessionImpl.List [T](NativeSQLQuerySpecification规范,QueryParameters queryParameters)在p:\ nhibernate-core中\ src \ NHibernate \ Impl \ SessionImpl.cs:位于p:\ nhibernate-core \ src \ NHibernate \ Impl \ SqlQueryImpl.cs中的NHibernate.Impl.SqlQueryImpl.ListT的第2077行:TestManager_Database.Program.Main中的第163行(String [ ] args)在C:\ Users \ cryan \ Documents \ Visual Studio 2010 \ Projects \ TestManager_Database \ TestManager_Database \ Program.cs:第287行,位于System.AppDomain.ExecuteAssembly的System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args) (String assemblyFile,Evidence assemblySecurity,String [] args)在System.Threading.ExecutionContext.Run的System.Threading.ThreadHelper.ThreadStart_Context(Object state)中的Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()(ExecutionContext executionContext,ContextCallback callback) ,对象状态,布尔值ignoreSyncCtx)在Sys System.Threading.ThreadHelper.ThreadStart()中的tem.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)

我已经尝试了NHibernate的源代码,但我没有想到任何东西。

任何有关这方面的帮助将不胜感激。

您的枚举 – TResult可能被保存为字符串值并尝试将其解析为int值(从错误消息中猜测)

尝试将结果属性的配置更改为:

  

其中MyNamespace.TResult,MyAssembly是枚举TResult的完全限定名

或者,将Result列更改为int 🙂