여름 NHibernate 튜토리얼을 공부하고 있으며 세션 04 : 트랜잭션 및 동시성 탐색 - 튜토리얼 에서처럼 유효하지 않은 객체로 인해 실패해야하는 SAVE 테스트를 만들고 싶습니다.왜 저장시 예외를 던지기보다는 Hibernate가 자동으로자를 수 있습니까?
목적은 트랜잭션을 올바르게 롤백 할 수 있는지 테스트하는 것입니다.
아이디어는 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 = 길이는 매핑 파일에 설정 되었습니까? 이렇게하면 저장을 실패 할 수 없도록 어떻게 방지 할 수 있습니까?
감사합니다, 부락의 ozdogan
당신이 당신의 테스트 DB로 SQLite는 사용하는 일이 마십시오 예외를 trowing해야
를 제거하면? SQLite를 사용할 때이 문제가 발생했습니다. 우리 프로젝트를 SQL Server로 옮길 때 코드는 이전에 (SQLite로) 문자열이 자동으로 잘린 곳에서 예외를 던지기 시작했습니다. SQL Server를 사용하는 경우 서버 구성을 통해 자동 자르기를 제어 할 수 있습니다. http://msdn.microsoft.com/en-us/library/ms190368.aspx –