Как получить реальный SQL из NHibernate с Log4Net - PullRequest
0 голосов
/ 11 ноября 2011

Я решил узнать, как использовать ORM, чтобы избежать изучения некоторого SQL (ошибочным подходом было бы отказаться от SQL).

Мне удалось получить Nhibernate "SQL", используяLog4Net, используя инструкции, которые продублированы во многих блогах.Я получаю «SQL» следующим образом:

NHibernate.Loader.Loader: 2011-11-11 15:03:14,348 [9] INFO  NHibernate.Loader.Loader [(null)] - SELECT this_.RegionID as RegionID9_0_, this_.RegionDescription as RegionDe2_9_0_ FROM Region this_

Теперь поправьте меня, если я ошибаюсь, но это не SQL, и я не могу понять, почему все эти блоги говорят так, как есть.

Странно то, что раньше, когда я возился с log4net, я уверен, что смог записать обычный SQL в лог-файл.Когда я в основном выполнял getall () для сущности (читал всю таблицу), все отдельные запросы были перечислены там с идентификатором в запросе -one для каждой строки (сущности).Я определенно не представлял это.Может кто-нибудь сказать мне, как это делается с log4net?Вот мой конфиг прямо сейчас:

<log4net>
<appender name="DebugSQL" type="log4net.Appender.TraceAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
  <param name="File" value="log.txt"/>
  <param name="AppendToFile" value="true"/>
  <param name="DatePattern" value="yyyy.MM.dd"/>
  <layout type="log4net.Layout.PatternLayout,log4net">
          <conversionpattern value="%d %p %m%n">
          </conversionpattern>
    </layout>
  </appender>

<logger name="NHibernate.Loader.Loader" additivity="false">
  <level value="All"/>
  <appender-ref ref="DebugSQL" />
</logger>

Редактировать: теперь я знаю, что это был sql, и я не мог воспроизвести испущенный sql, который я видел ранее, потому что была включена отложенная загрузкадо:

NHibernate.SQL: SELECT region_.RegionDescription as RegionDe2_9_ FROM Region region_ WHERE region_.RegionID=@p0;@p0 = 1 [Type: Int32 (0)]
NHibernate.SQL: SELECT region_.RegionDescription as RegionDe2_9_ FROM Region region_ WHERE region_.RegionID=@p0;@p0 = 2 [Type: Int32 (0)]
NHibernate.SQL: SELECT region_.RegionDescription as RegionDe2_9_ FROM Region region_ WHERE region_.RegionID=@p0;@p0 = 3 [Type: Int32 (0)]
NHibernate.SQL: SELECT region_.RegionDescription as RegionDe2_9_ FROM Region region_ WHERE region_.RegionID=@p0;@p0 = 4 [Type: Int32 (0)]

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

То, что вы видите после тире в журнале, действительно SQL. Это синтаксически и семантически правильно, но выглядит просто безобразно. Это обычное явление, когда SQL не пишется вручную: генераторы кода используют имена, такие как RegionID9_0_, для устранения неоднозначности, что делает вывод необычным для читателя.

2 голосов
/ 11 ноября 2011

измените файл translationPattern в 4-й строке с:

%date [%thread] %-5level %logger [%property{NDC}] - %message%newline

на

%message%newline

, и вы будете регистрировать только SQL (это значение% message)

следующая строка из вашего журнала - SQL:

SELECT this_.RegionID as RegionID9_0_, this_.RegionDescription as RegionDe2_9_0_ FROM Region this_
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...