Hello everyone,
I'm seeing some strange behaviour in NHibernate, in particular that ISession.Refresh doesn't always do what it says on the tin when I call it. My code:
public TEntity Refresh(TEntity entity)
{
Contract.Requires<ArgumentNullException>(entity != null, "entity");
try
{
this.Session.Refresh(entity);
return entity;
}
catch (Exception ex)
{
throw new RepositoryException("", ex);
}
}
Unit test I'm calling it from:
[Test]
public void ShouldRefresh()
{
var customer = new Customer { CustomerId = "ALFKI" };
customer = this.repository.Refresh(customer);
Assert.IsNotEmpty(customer.CompanyName);
}
What's strange is that if I run the unit test by itself, it passes having refreshed all the properties I didn't bother to fill in. If I run the test in a test run after other tests, it fails.
I'm only initialising the ISession once per test run, which seems to be the key here. With a clean ISession it works fine, with one that's already been used for other stuff it fails. As I intend to control the lifecycle of the ISession from a single composition root, reinitialising the ISession isn't an option. Therefore, my question is: how can I get ISession.Refresh to work without reinitialising the ISession?