Из интереса узнать, что происходит за кулисами, я использую некоторые методы тестирования, которые специально передают данные в мою базу данных через NHibernate. Я играю с различными настройками сопоставления и наблюдаю за процессами сеанса через последнюю версию NHProfiler.
Я заметил кое-что странное, и это, возможно, не вызывает беспокойства, но подумал, что я уточню в трубках:
[Test]
public void Seed_Default_Users()
{
Role adminRole;
var user = new User { UserName = "nkirkes", IsActive = true, Email = "nkirkes@dtsagile.com" };
using (var sesh = _sessionFactory.OpenSession())
{
userRepo = new NHibernateRepository<User>(sesh);
roleRepo = new NHibernateRepository<Role>(sesh);
using (var tx = sesh.BeginTransaction())
{
// get the administrators role
adminRole = roleRepo.Entities.FirstOrDefault(x => x.Name == "Administrator");
tx.Commit();
}
// set up the object relationship from user -> role
user.AddRole(adminRole);
using (var tx = sesh.BeginTransaction())
{
// save it
userRepo.Save(user);
tx.Commit();
}
}
}
И полученный результат в NHProf:
-- statement #1
begin transaction with isolation level: Unspecified
-- statement #2
select *
from (SELECT this_.ROLE_ID as ROLE1_2_0_,
this_.Name as Name2_0_
FROM ROLES this_
WHERE this_.Name = 'Administrator' /* :p0 */)
where rownum <= 1 /* :p1 */
И это все. Теперь вставка на самом деле происходит, но NHProf показывает только начальное открытие 1-й транзакции и первый оператор выбора. Что мне не хватает? Поскольку метод действительно работает, я склонен оставить его в покое, но я также боюсь, что если NHProf не увидит остальные утверждения, возможно, что-то еще не так.