當使用INSTEAD OF觸發器定位視圖時,幾乎不可能獲得正確的行數。在深入瞭解源代碼之後,我發現你可以創建一個自定義的持久化器,這會讓NHibernate忽略計數檢查。
public class SingleTableNoResultCheckEntityPersister : SingleTableEntityPersister
{
public SingleTableNoResultCheckEntityPersister(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping)
: base(persistentClass, cache, factory, mapping)
{
for (int i = 0; i < this.insertResultCheckStyles.Length; i++)
{
this.insertResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None;
}
for (int i = 0; i < this.updateResultCheckStyles.Length; i++)
{
this.updateResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None;
}
for (int i = 0; i < this.deleteResultCheckStyles.Length; i++)
{
this.deleteResultCheckStyles[i] = ExecuteUpdateResultCheckStyle.None;
}
}
}
是啊。在我的情況下,我使用SharpArchitecture框架,默認未保存的「Id」字段的值爲零,而不是-1,因爲我習慣使用多年。我嘗試覆蓋這個在我的automapping配置,甚至在一個自定義映射類...但仍然將其設置爲0. – wgpubs 2010-11-03 22:03:18
所以你試試這個:Id(a => a.Id).UnsavedValue(0);如果您仍然遇到問題並希望我看看,請將生成的SQL和您的映射添加到您的問題中。 – Iain 2010-11-03 22:57:36
我有這個問題,因爲一個空對象被添加到集合,然後保存正在完成。 – m4tt1mus 2014-10-09 22:54:10