Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#4.0 NUnit NHibernate
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 holds the ISession
       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?
Posted 24-Feb-12 6:22am
jim lahey24.9K

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 565
1 Kornfeld Eliyahu Peter 409
2 Maciej Los 369
3 DamithSL 196
4 OriginalGriff 188
0 OriginalGriff 6,353
1 DamithSL 4,854
2 Maciej Los 4,466
3 Kornfeld Eliyahu Peter 4,058
4 Sergey Alexandrovich Kryukov 3,897


Advertise | Privacy | Mobile
Web04 | 2.8.141220.1 | Last Updated 24 Feb 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100