2011-08-03 52 views
0

SYBASE廣東話查詢已經開始使用NHibernate的對Sybase ASE的數據,問題現在面臨的是當我加載實體,我得到以下錯誤與NHibernate

「System.IndexOutOfRangeException:無效的索引0這個OdbcParameterCollection以計數= 0。 「

這是我如何配置會話

properties["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider"; 
properties["connection.driver_class"] = "NHibernate.Driver.OdbcDriver"; 
properties["connection.connection_string"] = @"Driver={Adaptive Server Enterprise};server=;port=; db=;uid=;pwd="; 
properties["dialect"] = "NHibernate.Dialect.SybaseASE15Dialect"; 

和對象的映射

<class name="MenuGroup" table="MENU_GROUP"> 
    <id name="Id" column="id" type="Int32"> 
     <generator class="identity" /> 
    </id>  
    <property name="Name" column="name" type="String" length="100" not-null="true" /> 
    <property name="Position" column="position" type="Int32" /> 
    </class> 

,如果我做

var menuGroup = _session.Get<Menu.MenuGroup>(1); 

我得到錯誤

NHibernate.Exceptions.GenericADOExc eption:無法加載實體:[DomainModel.Menu.MenuGroup#1] [SQL:SELECT menugroup0_.id as id1_0_,menugroup0_.name as name1_0_,menugroup0_.position as position1_0_ FROM MENU_GROUP menugroup0_ WHERE menugroup0_.id =?] - ---> System.IndexOutOfRangeException:此計數爲0的OdbcParameterCollection的索引0無效。

+0

。我試圖讓我的解決方案與NHibernate 3.2一起工作。你使用什麼版本? – TedOnTheNet

+0

3.2.0.4,如果更改爲舊版本,任何想法都將有助於 –

+0

,我們的解決方案曾用於SQL Anywhere 10,但我們昨天已遷移到12。我使用的是基於.net framework 2.0的NHibernate 2.1.2 GA。今天我已經開始實現NHibernate 3.2.0.4000(3.2 GA),但是現在我所有的查詢單元測試都會因爲你描述的錯誤而失敗。 – TedOnTheNet

回答

0

移動從ODBC幫助遠離,改變了配置到

性質[ 「connection.provider」] = 「NHibernate.Connection.DriverConnectionProvider」; properties [「connection.driver_class」] =「NHibernate.Driver.SybaseAseClientDriver」; 性質[ 「connection.connection_string」] = @ 「服務器= * ;端口= 5000; DB =;用戶ID = * ;密碼=;」; properties [「dialect」] =「NHibernate.Dialect.SybaseASE15Dialect」;

1

我創造我自己的連結驅動

using NHibernate.Driver; 

namespace Framework.Persistency 
{ 
    public sealed class MySybaseSQLAnywhereDriver : SybaseSQLAnywhereDriver 
    { 
     public override bool UseNamedPrefixInSql 
     { 
      //default is false 
      get { return true; } 
     } 

     public override bool UseNamedPrefixInParameter 
     { 
      //default is false 
      get { return true; } 
     } 

     public override string NamedPrefix 
     { 
      //default is string.Empty 
      get { return ":"; } 
     } 
    } 
} 

而在NHibernate的配置使用它解決了這個問題:

configDictionary.Add(Environment.ConnectionDriver, typeof(MySybaseSQLAnywhereDriver).AssemblyQualifiedName); 
我有同樣的問題ATM