我是nhibernate的新手(但之前使用过hibernate for java)。
我为我们的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()
方法将查询记录到控制台。
在我的程序中,我加载/创建两个对象,并希望保留它们,然后对列进行更新:
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对象的第一个插入将记录在控制台上,但另一个插入和剪辑对象的更新不会出现在控制台中。当我查看数据库时,我看到一切正常,一切都将被插入和更新。但我想看看查询。我尝试将flush模式设置为always,并在会话结束时创建session.Flush(),然后创建session.Dispose(),但没有任何更改。
当我使用postgres(只更改sessionfactory)时,我会看到所有查询日志。 如何让nhibernate记录sql server的所有查询?
答案 0 :(得分:1)
使用ADO.NET批处理(默认情况下在支持它的SQL Server中打开)时,DML查询不会记录到控制台。