0

私はnhibernateを初めて使用します(ただし、以前はJavaにhibernateを使用していました)。

SQL Server データベース (SQL Server Enterprise Edition 8) のセッション ファクトリを構築しました。

ISessionFactory factory2 = Fluently.Configure()
  .Database(MsSqlConfiguration.MsSql2008
    .ConnectionString(@"user id=xx; password=xxx;server=xxx;initial catalog=xxx")
    .ShowSql()
  )
  .Mappings(m => m.FluentMappings
    .AddFromAssemblyOf<Program>())
  .ExposeConfiguration(cfg => new SchemaValidator(cfg).Validate())
  .BuildSessionFactory();

そのため、ShowSql()メソッドを使用してクエリをコンソールに記録します。

私のプログラムでは、2 つのオブジェクトをロード/作成し、それらを永続化してから列を更新したいと考えています。

using (var session = sf.OpenSession())
{
    session.FlushMode = FlushMode.Always;
    using (var ta = session.BeginTransaction())
    {
        Console.ReadKey();
        PMA pm = session.CreateCriteria<PMA>()
            .Add(Restrictions.Eq("Name", "HANSER")).List<PMA>().FirstOrDefault();
        if (pm == null)
        {
            pm = new PMA();
            pm.Prio = "1";
            pm.Name = "HANSER";
            pm.Datum = DateTime.Now;
            session.Save(pm);
        }

        Clip clip = new Clip();
        clip.PMA = pm;
        clip.sys_created = DateTime.Now;
        clip.sys_name = "system name";
        clip.Title = "Test";
        session.Save(clip);

        Console.ReadKey();

        clip.Title = "PETERSEN";
        session.SaveOrUpdate(clip);
        session.Transaction.Commit();
        session.Flush();
        session.Dispose();

        Console.ReadKey();
    }
}

pm オブジェクトの最初の挿入はコンソールに記録されますが、他の挿入とクリップ オブジェクトの更新はコンソールに表示されません。データベースを見ると、すべてが正しく、すべてが挿入および更新されていることがわかります。しかし、私はクエリを見たいです。フラッシュモードを常に設定し、最後にセッションにsession.Flush()を作成してからsession.Dispose()を作成しようとしましたが、何も変わりません。

postgres を使用すると (sessionfactory のみを変更します)、すべてのクエリ ログが表示されます。nhibernate に sql server のすべてのクエリをログに記録させるにはどうすればよいですか?

4

1 に答える 1

1

ADO.NET バッチ処理を使用している場合 (SQL Server では既定で有効になっており、バッチ処理がサポートされています)、DML クエリはコンソールに記録されません。

于 2012-08-16T22:53:20.207 に答える