Не могу запросить Sybase с помощью Nhibernate - PullRequest
0 голосов
/ 03 августа 2011

Начали использовать NHibernate для данных Sybase ASE, проблема, с которой я сталкиваюсь, заключается в том, что при загрузке сущности я получаю ошибку ниже

"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.GenericADOException: не удалось загрузить сущность: [DomainModel.Menu.MenuGroup # 1] [SQL: SELECT menugroup0_.id в качестве id1_0_, menugroup0_.name в качестве имени1_0_, menugroup0_.position в качестве позиции1_0_группы людей WHERGG0.id =?] ----> System.IndexOutOfRangeException: недопустимый индекс 0 для этой коллекции OdbcParameterCollection с Count = 0.

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Я решил эту проблему, создав собственный драйвер подключения

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);
0 голосов
/ 03 августа 2011

помог отойти от odbc, изменил конфигурацию на

properties ["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";properties ["connection.driver_class"] = "NHibernate.Driver.SybaseAseClientDriver";properties ["connection.connection_string"] = @ "server = *; port = 5000; db = ; идентификатор пользователя = *; пароль = ; ";properties ["dialect"] = "NHibernate.Dialect.SybaseASE15Dialect";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...