私は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 のすべてのクエリをログに記録させるにはどうすればよいですか?