我一直在研究夏季的NHibernate教程,當我已經達到了04屆:探索事務和併發 - 只是像教程 - 我想創建一個保存測試,因爲無效目標應該失敗。爲什麼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 =在映射文件中設置的長度?我怎樣才能防止這種情況發生,使它可以保存失敗?
感謝, 布拉克ozdogan
你碰巧使用SQLite作爲你的測試數據庫?我在使用SQLite時遇到過這個問題。當我們將項目移至SQL Server時,代碼開始在先前(使用SQLite)字符串被自動截斷的地方拋出異常。如果您使用SQL Server,則可以通過服務器的配置來控制自動截斷。請參閱http://msdn.microsoft.com/en-us/library/ms190368.aspx – 2010-08-17 04:42:53