Я пытаюсь перенести приложение из NHibernate 1.x в 2.1, и я заметил нечто странное: мои неизменяемые объекты удаляются в моих интеграционных тестах.
Например, этот тест раньше проходил:
[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 должен произойти сбой из-за попытки удалить экземпляр, тип которого сопоставлен с mutable = "false". Однако после обновления ожидаемого типа исключения этот тест завершается неудачей (поскольку исключение не выдается). Я проверил базу данных и проследил за тестом, и запись создана, экземпляр загружен, и запись впоследствии снова удаляется.
Рассматриваемый класс сопоставлен с той же таблицей, что и другой класс, - он более или менее предназначен для просмотра только подмножества этих данных. Вот отображение классов:
<?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>
Я ожидаю, что упускаю что-то простое, но я искал в Интернете любую причину, по которой атрибут mutable мог быть проигнорирован, и я выдал пустой.
UPDATE:
При входе в Log4Net становится ясно, что NHibernate отправлял команду удаления в базу данных.