Конфигурация FluentNHibernate, исключение NotSupportedException в DBConnection.GetSchema () - PullRequest
1 голос
/ 09 декабря 2011

Попытка настроить SQL Ce база данных и получить следующее исключение для BuildSessionFactory () .

Та же конфигурация работает для SQLite , но я раньше не использовал SQLCe с NHibernate.

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

Ссылки:

System.Data.SqlServerCe  3.5.1.0
FluentNHibernate 1.2
NHibernate 3.1

Конфигурация:

        Dim fluentConfiguration = Fluently.Configure() _
       .Database(MsSqlCeConfiguration.Standard.ConnectionString(connectionString)) _
        .Mappings(Function(m) m.FluentMappings.AddFromAssemblyOf(Of InstrumentMap)() _
                      .Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never())) _
        .ExposeConfiguration(Function(c) InlineAssignHelper(cfg, c)) _
        .Cache(Function(c) c.UseQueryCache())

    sessionFactory = fluentConfiguration.BuildSessionFactory()

Исключение в DBConnection.cs, по адресу:

        virtual public DataTable GetSchema(string collectionName) {
            throw ADP.NotSupported(); 
        } 

Система.NotSupportedException произошла Сообщение = указанный метод не поддерживается.Source = System.Data StackTrace: в System.Data.Common.DbConnection.GetSchema (String collectionName) InnerException:

Btw;Я получаю то же исключение, если опускаю .ExposeConfiguration (..)

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

GetSchema не поддерживается 3.5, но SQL Server Compact 4.0 поддерживает GetSchema

0 голосов
/ 13 февраля 2012

GetSchema () вызывается Hibernate во время запуска.В своих настройках по умолчанию он пытается определить, подходит ли схема БД.Если схема отличается, Hibernate способен обновить схему - если база данных способна сообщить свою текущую схему.Как уже сказал Эрик: SQL CE не способен сообщать о текущей схеме ... Следовательно, это не проблема самого Fluent.

Поэтому я вижу следующие альтернативы для вас:

  1. Избавиться от исключения а.Лови и игнорируй б.Предотвратите, чтобы Hibernate вызывал SchemaUpdate.Execute (), но SchemaExport.Create () (если вы хотите, чтобы ваша схема создавалась). При взгляде на ваш код это наиболее вероятно можно сделать в InlineAssignHelper?1009 *

    Избавиться от SQL CE; -)

  2. Переключиться на SQL CE 4.0

С уважением, Семь

...