Я изучал учебники Summer Of NHibernate, и когда я добрался до Сессии 04: Изучение транзакций и параллелизма - как и в учебнике - я хотел создать тест SAVE, который должен завершиться неудачей из-за недопустимого объекта. *
Цель - проверить, может ли он выполнить откат транзакции должным образом.
Идея состоит в том, чтобы создать недопустимый объект, у которого есть свойство с большим количеством символов, чем требуемая сумма, установленная Db. Но то, что делает NHibernate, это то, что он получает первое необходимое количество символов, удаляет остальное и успешно сохраняет его в Db .
Вот мой тест, который не проходит:
[Test]
public void AddCountryThrowExceptionOnFail()
{
// This returns a Country with country code having more than 50 chars
// Where its length is set to 3 chars only
Country invalidCountry = GetInvalidCountry();
_dataProvider.AddCountry(invalidCountry);
}
Это метод AddCountry:
public int AddCountry(Country country)
{
using (ISession session = GetSession())
{
using (ITransaction tx = session.BeginTransaction())
{
try
{
int pk_Country = (int)session.Save(country);
session.Flush();
tx.Commit();
return pk_Country;
}
catch(Exception)
{
tx.Rollback();
throw;
}
}
}
}
И вот как файл сопоставления устанавливается для свойства CountryCode:
<property name="CountryCode" column="CountryCode" type="string" length="3" not-null="true"></property>
Итак, вопрос в том, почему NHibernate получает первые N символов, где n = длина установлена в файле отображения? Как я могу предотвратить это, чтобы он мог потерпеть неудачу при сохранении?
Спасибо,
Бурак Оздоган