Как правильно сохранить объект с помощью nhibernate? - PullRequest
0 голосов
/ 26 ноября 2009

Я новичок в Hibernate, я только начал делать сопоставление с таблицей, но у меня возникают некоторые проблемы, когда я пытаюсь написать объект, вот мой модульный тест:

[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);
        }
    }
}

Когда я запускаю CanCreateOneFacility, я получаю это исключение:

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()

Я начал отладку теста, исключение не выдается И данные записываются, но после завершения теста возникает исключение.

Что я делаю не так? это неправильный способ сохранить объекты?

1 Ответ

0 голосов
/ 26 ноября 2009

Вы используете S # arp Architecture, верно? Я считаю, DatabaseRepositoryTestsBase уже предоставляет транзакцию для вас, поэтому вам не нужно устанавливать ее в своем тестовом коде. Поэтому попробуйте удалить:

repository.DbContext.BeginTransaction();

и

repository.DbContext.CommitTransaction();

и посмотрите, работает ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...