Я изучаю Summer of NHibernate Tutorials, и когда я достиг сеанса 04: Изучение транзакций и параллелизма - как и в учебнике - я хотел создать тест SAVE, который должен завершиться неудачно из-за недопустимого объекта.Почему NHibernate автоматически усекает, а не бросает исключение на сохранение?
Цель состоит в том, чтобы проверить, может ли он откатить транзакцию должным образом.
Идея заключается в создании недопустимого объекта, который имеет свойство с большим количеством символов, чем требуемая сумма, установленная 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 = длина, заданная в файле сопоставления? Как я могу предотвратить это, чтобы он мог сбой при сохранении?
Спасибо, Бурак Оздоган
ли случится использовать SQLite в качестве тестирования БД? Я столкнулся с этим сам, когда использовал SQLite. Когда мы переместили наш проект на SQL Server, код начал бросать исключения в местах, где ранее (с SQLite) строка была автоматически усечена. Если вы используете SQL Server, вы можете управлять автоматическим усечением через конфигурацию сервера. См. Http://msdn.microsoft.com/en-us/library/ms190368.aspx –