2009-11-26 3 views
0

Je suis nouveau à Hibernate, je viens de commencer à faire une cartographie à une table, mais je vais avoir quelques problèmes lorsque je tente d'écrire un objet, voici mon test unitaire:Quelle est la bonne façon de sauvegarder un objet avec nhibernate?

[TestFixture] 
public class FacilityRepositoryTest : DatabaseRepositoryTestsBase 
{ 
    private IRepository<Facility> repository = new Repository<Facility>(); 

    [Test] 
    public void CanGetAllFacilities() 
    { 
     IList<Facility> allFacilities=repository.GetAll(); 
     Assert.IsNotNull(allFacilities); 
     foreach (Facility facility in allFacilities) 
     { 
      Console.WriteLine(facility.NAME); 
     } 
    } 
    [Test] 
    public void CanCreateOneFacility() 
    { 
     try 
     { 
      repository.DbContext.BeginTransaction(); 
      Facility facility = new Facility(); 
      facility.FACILITY_CODE = "abc"; 
      facility.NAME = "Nameds"; 
      facility.ADDRESS = "Reinhardt strasse"; 
      repository.SaveOrUpdate(facility); 
      repository.DbContext.CommitTransaction(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 
} 

Quand je lance CanCreateOneFacility, je reçois cette exception:

TestCase 'PJ1.TestUsingDevDb.PJ1Web.Data.FacilityRepositoryTest.CanCreateOneFacility' 
failed: TearDown : NHibernate.TransactionException : Transaction not successfully started 
--TearDown 
en NHibernate.Transaction.AdoTransaction.CheckBegun() 
en NHibernate.Transaction.AdoTransaction.Rollback() 

j'ai commencé le test de débogage et aucune exception est levée et les données sont enregistrées, mais après le test est terminé vient l'exception.

Qu'est-ce que je fais mal? est-ce une façon incorrecte de sauvegarder les objets?

Répondre

0

Vous utilisez l'architecture S # arp, n'est-ce pas? Je crois que DatabaseRepositoryTestsBase fournit déjà une transaction pour vous, donc vous n'avez pas besoin d'en créer une dans votre code de test. Alors essayez de supprimer:

repository.DbContext.BeginTransaction(); 

et

repository.DbContext.CommitTransaction(); 

et voir si cela fonctionne.

+0

Salut Rian merci pour votre réponse, Oui j'utilise l'architecture arp # s, j'ai essayé sans commencer et commettre la transaction, maintenant je ne reçois aucune exception, mais maintenant l'objet n'est pas enregistré. Peut-être qu'il me manque quelque chose d'autre? – Leg10n

+0

Que voulez-vous tester? Je ne vois aucun Assert dans le test. Si vous voulez tester si la fonctionnalité a été rendue persistante, vous pouvez vérifier si NHibernate a assigné un id, en affirmant le facility.Id id not null après l'appel à SaveOrUpdate. –

Questions connexes