Быстрый NHibernate и PostgreSQL, SchemaMetadataUpdater. QuoteTableAndColumns - Система. NotSupportedException: Указанный метод не поддерживается

Я использую fluentnhibernate с PostgreSQL. Fluentnhibernate является последней версией. Версия PosrgreSQL 8.4. Мой код для создает ISessionFactory:

public static ISessionFactory CreateSessionFactory()
{
        string connectionString = ConfigurationManager.ConnectionStrings["PostgreConnectionString"].ConnectionString;
        IPersistenceConfigurer config = PostgreSQLConfiguration.PostgreSQL82.ConnectionString(connectionString);

        FluentConfiguration configuration = Fluently
            .Configure()
            .Database(config)
            .Mappings(m =>
                m.FluentMappings.Add(typeof(ResourceMap))                                    
                                .Add(typeof(TaskMap))
                                .Add(typeof(PluginMap)));
        var nhibConfig = configuration.BuildConfiguration();
        SchemaMetadataUpdater.QuoteTableAndColumns(nhibConfig);
        return configuration.BuildSessionFactory();
}

Когда я, выполняют код в строке SchemaMetadataUpdater. QuoteTableAndColumns (nhibConfig); ошибка броска: Система. NotSupportedException: Указанный метод не поддерживается.Помогите мне, пожалуйста! Я - очень потребность в решении.С уважением

10
задан Sean Carpenter 13 March 2010 в 20:53
поделиться

2 ответа

Попробуйте это:

public static ISessionFactory CreateSessionFactory()
{
        string connectionString = ConfigurationManager.ConnectionStrings["PostgreConnectionString"].ConnectionString;
        IPersistenceConfigurer config = PostgreSQLConfiguration.PostgreSQL82.ConnectionString(connectionString);

        FluentConfiguration configuration = Fluently
            .Configure()
            .Database(config)
            .Mappings(m =>
                m.FluentMappings.Add(typeof(ResourceMap))                                    
                                .Add(typeof(TaskMap))
                                .Add(typeof(PluginMap)));
        configuration.ExposeConfiguration(x => x.SetProperty("hbm2ddl.keywords", "auto-quote"));
        return configuration.BuildSessionFactory();
}
9
ответ дан 4 December 2019 в 00:23
поделиться
  1. SchemaMetadataUpdater.QuoteTableAndColumns (nhibConfig);
  2. configuration.ExposeConfiguration (x => x.SetProperty ("hbm2ddl.keywords", "автокотирование"));

Я пробовал и то, и другое. У меня это не сработало с последней версией Fluent NHibernate (5f7adcd) и последней версией postgresql 8.4. Эти двое вероятно отключены от Fluent NHibernate. Если вы используете NHibernate и HBM без Fluent, это сработает для вас.

Чтобы явно попросить Fluent NHibernate сгенерировать Quoted Identifier для таблицы и столбца, я исправил два файла в исходном коде Fluent NHibernate, чтобы заставить его работать для postgresql. {{1 }} (Если вам не нужна такая же сборка для других баз данных)

пространство имен: FluentNHibernate.MappingModel.Выход

  1. Добавить «Цитата» к имени таблицы в XmlClassWriter.cs

     if (classMapping.HasValue (x => x.TableName)) 
    classElement.WithAtt («table», new System .Text.StringBuilder (). Append ("\" "). Append (classMapping.TableName) .Append (" \ ""). ToString ()); 
     
  2. Добавить "Цитата" к имени столбца at XmlColumnWriter.cs

     if (columnMapping.HasValue (x => x.Name)) 
    element.WithAtt ("имя", новый System.Text.StringBuilder (). Append ("\ "") .Append (columnMapping.Name) .Append ("\" "). ToString ()); 
     

Пока это работает как шарм. Получите исходный код на http://github.com/jagregory/fluent-nhibernate и создайте свой собственный с указанными выше обновлениями.

2
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: