我正在尝试将应用程序从NHibernate 1.x迁移到2.1,并且我发现了一些奇怪的事情:我的集成测试中正在删除我的不可变对象。为什么NHibernate删除不可变的类实例?
例如,本次测试使用的经过:
[Test, ExpectedException(typeof(NHibernate.HibernateException))]
public void DeleteExistingInstanceThrows()
{
// Note: NHib transaction is opened/rolled back in test setup/teardown
m_testRecordId = CreateRecordInDB();
var dao = new NHibFactory().GetTransDao();
var obj = dao.GetById((long)m_testRecordId, false);
dao.Delete(obj);
dao.CommitChanges();
Assert.IsFalse(TestRecordExists(m_testRecordId));
}
到的CommitChanges调用应该抛出,因为试图删除一个实例,其类型映射与可变=“假”。但是,在更新预期的异常类型之后,此测试现在会失败(因为不会引发异常)。我检查了数据库并通过了测试,记录被创建,实例被加载,然后记录被再次删除。
正在讨论的类与另一个类映射到同一个表 - 它或多或少意图作为该数据子集的只读视图。这里的类映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Sample.Trans, Sample" table="tblTrans" mutable="false">
<id name="Id" column="transId" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Amount" column="amount" type="Decimal" />
<!-- ...a half dozen other mapped fields... -->
</class>
</hibernate-mapping>
我希望我失去了一些基本的东西,但我一直在网上淘任何原因可变属性可能会被忽略,我想出空。
UPDATE:
与log4net的记录,很显然,NHibernate的被发送删除命令到数据库。
你说你测试后回滚事务?所以行被回滚,而不是被删除。数据库分析器应该在这里帮助。 – Canton 2009-10-08 02:57:46