Nhibernate show_sql = false не работает - PullRequest
2 голосов
/ 23 июня 2011

Вот так я создаю Session Factory, используя Fluent Nhibernate

    public static ISessionFactory CreateSessionFactory()
        {
            FluentNHibernate.Cfg.FluentConfiguration fconfig;


            fconfig = FluentNHibernate.Cfg.Fluently.Configure()
                        .Cache(c=>c.UseQueryCache())
                        .Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008 
                                        .ConnectionString(c => c.FromConnectionStringWithKey("Database"))
                        .ProxyFactoryFactory<NHibernate.ByteCode.LinFu.ProxyFactoryFactory>()
                        .Mappings(
                                  m =>  m.FluentMappings
                                        .AddFromAssemblyOf<NHibernateRepositoryRegistry>()
                                        .Conventions.Add<Conventions.PrimaryKeyConvention>()
                                        .Conventions.Add<Conventions.IdForeignKeyConvention>()
                                        .Conventions.Add<Conventions.ReferenceForeignKeyConstraintNameConvention>()
                            )
                   //  i have tried this but it did not work
                   //.ExposeConfiguration(config=>{config.SetProperty("show_sql", "false");});
           return fconfig.BuildSessionFactory();
        }

Это моя конфигурация log4net внутри Web.config

    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="nhibernate.log" />
        <appendToFile value="true" />
        <maximumFileSize value="100KB" />
        <maxSizeRollBackups value="2" />

        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="RollingFile2" type="log4net.Appender.RollingFileAppender">
        <file value="nhibernatesql.log" />
        <appendToFile value="true" />
        <maximumFileSize value="100KB" />
        <maxSizeRollBackups value="2" />

        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
        </layout>
    </appender>
    <logger name="NHibernate">
        <level value="INFO" />
        <appender-ref ref="RollingFile" />
    </logger>


    <logger name="NHibernate.SQL">
        <level value="ALL" />
        <appender-ref ref="RollingFile2" />
    </logger>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingFile" />
    </root>

</log4net>  

У меня был ShowSql () настройка

, и я пытался установить ее через appsettings web.config, чтобы я мог включить или выключить ее в зависимости от конфигурации

, поэтому я удалил ShowSql () и попытался выполнить следующее (прямо сейчас яя просто передаю "ложное" значение)

.ExposeConfiguration(config=>{config.SetProperty("show_sql", "false");});

также пытался

.ExposeConfiguration(config=>{config.SetProperty("hibernate.show_sql", "false");});

, но я все еще получаю sql, сгенерированный в файле nhibernatesql.log

Я использую NHibernatev3.1.0.4000 и FluentNHibernate v1.2.0.712 и ASP.NET MVC3

кто-нибудь знает, почему sql все еще генерирует?

действительно ли show_sql или ShowSql () предназначены только для цели Console.output, а sql отправляется в log4net независимо от того?

Моя главная проблема - низкая производительность, если для ShowSQL установлено значение true

Не уверен, что я устанавливаю ShowSql где-то еще

1 Ответ

7 голосов
/ 23 июня 2011

хорошо, я думаю, что получил ответ

на основе http://www.davesquared.net/2008/01/viewing-sql-generated-by-nhibernate.html

show_sql используется только для целей Console.out, и sql отправляется в log4net независимо .. и именно поэтому я вижу sql в журналах

...