簡體   English   中英

用nhibernate保存對象的正確方法是什么?

[英]What's the proper way to save a object with nhibernate?

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

我開始調試測試,沒有引發異常,並且正在記錄數據,但是在測試完成之后會出現異常。

我究竟做錯了什么? 這是保存對象的錯誤方法嗎?

您正在使用S#arp體系結構,對嗎? 我相信DatabaseRepositoryTestsBase已經為您提供了一項事務,因此您不必在測試代碼中進行設置。 因此,請嘗試刪除:

repository.DbContext.BeginTransaction();

repository.DbContext.CommitTransaction();

看看是否可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM