Свободно владеет NHibernate 3 и Oracle.Доступ к данным

#oracle #nhibernate #odp.net #fluent

#Oracle #nhibernate #odp.net #свободно

Вопрос:

мой вопрос:

Я пытаюсь использовать Oracle.DataAccess.Client Provider с NHibernate (свободно), и я настроил его следующим образом:

 Fluently.Configure().Database(OracleClientConfiguration.Oracle10.Provider("Oracle.DataAccess.Client").ConnectionString(c => c.FromConnectionStringWithKey("ORACLE1"))).
  

и у меня эта ошибка:

 "Could not load type Oracle.DataAccess.Client. Possible cause: no assembly name specified.":"
  

Я уже добавляю ссылку на Oracle.Dataaccess dll (ODAC) с copy local = true, но ошибка сохраняется…

Есть предложения?

Ответ №1:

Вот рабочий фрагмент кода:

 public static void InitializeNHibernate()
{
    var configurer = (OracleClientConfiguration.Oracle10.ShowSql().ConnectionString(c =>
                 c.FromConnectionStringWithKey("development"))
                 .DefaultSchema("myschema")
                 .UseReflectionOptimizer()
                 .Cache(c =>
                         c.ProviderClass<SysCacheProvider>()
                         .UseQueryCache()));

    var cfg = Fluently.Configure()
        .Database(configurer)
        .Mappings(m =>
                      {
                          m.FluentMappings
                              .AddFromAssemblyOf<Employee>()
                              .Conventions.Add<OracleDateTimeTypeConvention>();

                          m.HbmMappings
                              .AddFromAssemblyOf<Employee>();
                      })
        .ExposeConfiguration(configuration =>
        {
            configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
            configuration.SetProperty(Environment.GenerateStatistics, "true");
            configuration.SetProperty(Environment.CurrentSessionContextClass, "web");
            configuration.SetProperty(Environment.CommandTimeout, "60");
        });
}
  

Без указания поставщика он автоматически выбирает Oracle DataAccess.

Редактировать: Это не распознается автоматически, у меня просто есть это в строке подключения:

 <add name="development" connectionString="Data Source=XXX;User ID=yyy;Password=zzz;" providerName="Oracle.DataAccess.Client"/>
  

Комментарии:

1. Вы уверены, что он использует Oracle DataAccess?? разве это не использует System.Data. Клиент OracleClient?

2. Я уверен. Если я удалю ссылку, она будет запрашивать именно ее. К вашему сведению, вам не нужен System.Data. OracleClient в качестве ссылки.

3. я тоже пытался ProviderName =»Oracle. Доступ к данным. Клиент» в строке подключения, но, похоже, это игнорируется.

4. Как вы разместили Oracle. Доступ к данным. Клиент на вашем компьютере? XCOPY или install, поскольку ADO.NET в файлах конфигурации должны быть ссылки на поставщиков (см. machine.config для примера поставщика SQL Server).

5. Установил его. Это не отображалось в моих параметрах <добавить ссылку>, поэтому я добавил его вручную.