从内存中SQLite数据库中删除记录时出现NHibernate问题

时间:2014-03-11 20:16:35

标签: c# sqlite session nhibernate fluent-nhibernate

我试图在NHibernate中围绕会话管理。如果我以正确的方式做到这一点,我不能100%确定。所以这就是我的问题。我正在测试NHibernate存储库以进行数据库操作(添加,更新,删除和加载)。我已经能够让我的单元测试工作于添加,更新和加载,但删除记录给我带来了很多麻烦。

以下是我对源代码的要点:

NHibernate Helper for DB config and mapping

Doctors Class Mapping

Doctors Repository for DB operations

Unit Test for Doctors Repository DB operations

现在我认为问题在于CanDeleteDoctor()测试的代码:

[Test]
    public void CanDeleteDoctor()
    {
        using (DoctorsRepository repo = new DoctorsRepository())
        {
            try
            {
                repo.BeginTransaction();
                repo.Save(doctors[0]);
                Assert.IsNotNull(repo.GetByName(doctors[0].Name));
                repo.Delete(doctors[0]);
                Assert.IsNull(repo.GetByName(doctors[0].Name));
            }
            catch (Exception ex)
            {
                repo.RollbackTransaction();
                Assert.Fail(ex.Message + "\n" + ex.StackTrace);
            }
        }
    }

每当我运行此测试时,我都会收到一个例外情况:

Test 'PrototypeSLM.Tests.DoctorsRepositoryTest.CanDeleteDoctor' failed: 
  Expected: null
  But was:  <PrototypeSLM.Entities.Doctors>

   at NUnit.Framework.Assert.That(Object actual, IResolveConstraint expression, String   message, Object[] args)
   at NUnit.Framework.Assert.IsNull(Object anObject)
   at PrototypeSLM.Tests.DoctorsRepositoryTest.CanDeleteDoctor() in c:\Users\Craig_2\Documents\Visual Studio 2012\Projects\PrototypeSLM\PrototypeSLM.Tests\Tests\DoctorsRepositoryTest.cs:line 100
Tests\DoctorsRepositoryTest.cs(105,0): at PrototypeSLM.Tests.DoctorsRepositoryTest.CanDeleteDoctor()

我觉得这与我在内存数据库中如何进行会话管理有关?我尝试在DoctorsRepository中的Delete方法中添加_session.Flush(),但它还没有解决问题。我得到了一个新的例外,说&#34;无法访问已处理的对象&#34;在刷新会议之后。

有什么提示可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我通过在CanDeleteDoctor()测试中更改方法repo.Delete(x)中的参数来修复它:

repo.Delete(doctors[0]);

repo.Delete(repo.GetByName(doctors[0].Name));

我认为问题在于医生[0]的Id与数据库中医生记录的Id属性不匹配。所以存储库最终没有删除任何内容。总结起来非常棘手。

我的测试在此次更改后100%通过。

编辑:如果有人知道这里发生了什么,我很乐意听到解释。

相关问题