2010-11-03 64 views
2

我在使用linq在nhibernate中運行查詢時遇到了一個奇怪的錯誤。奇怪的nhibernate + linq + mysql異常

如果我直接在mysql中運行查詢,一切正常。如果我重新運行linq查詢,我沒有錯誤,但只有id字段(一個字符串)被提取。如果我多次運行查詢,有時第一行會被正確提取...

我的google-fu發現的唯一情況是this mysql bug,但我看不出它們是如何相關的。

編輯:它似乎與我在我的數據庫中的varbinary(128)字段有關。如果我刪除這個映射,一切都會再次運行。我將它映射到我的類中的一個byte []字段。我使用的是NHibernate 2.1.2.4000 NHibernate.Linq 1.1.0.1001(最新的GA版本),我用MySql Connector 6.1.2和6.2.4嘗試過(6.3.5失敗)。安裝由於某種原因)

NHibernate.Util.ADOExceptionReporter [(null)] - System.IndexOutOfRangeException: Buffer index must be a valid index in buffer 
    at MySql.Data.MySqlClient.MySqlDataReader.GetBytes(Int32 i, Int64 fieldOffset, Byte[] buffer, Int32 bufferoffset, Int32 length) 
    at NHibernate.Driver.NHybridDataReader.GetBytes(Int32 i, Int64 fieldOffset, Byte[] buffer, Int32 bufferoffset, Int32 length) 
    at NHibernate.Type.AbstractBinaryType.Get(IDataReader rs, Int32 index) 
    at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) 
    at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner) 
    at NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner) 
    at NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session) 
    at NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session) 
    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) 
    at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) 
    at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) 
    at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) 
    at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) 
    at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) 

有沒有人遇到過此錯誤?

回答