是否有可能從StackTrace中說出這個異常的來源?關於刪除子對象的NHibernate StaleStateException
StaleStateException: Unexpected row count: 0; expected: 1
我在多個DataGridViews中顯示父/子對象集合,並執行varioius添加/刪除/保存命令。嘗試刪除子行/實體時會發生此異常。我使用DefaultCascadeAll約定。
發生此異常之後,即使未調用相應的父實體,也會從數據庫中刪除相應的父實體。所以在下面的圖片中,我開始了這個程序。商店Id = 55不存在。
程序窗口:http://img822.imageshack.us/img822/4686/ss20110201212511.png
堆棧跟蹤:http://img145.imageshack.us/img145/408/ss20110201211702.png
映射:
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Staff)
.Inverse()
.Cascade.All();
HasManyToMany(x => x.Products)
.Cascade.All()
.Table("StoreProduct");
}
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
References(x => x.Store);
}
}
EDIT1:
private void btnDeleteEmployee_MouseDown(object sender, MouseEventArgs e)
{
var item = bsEmployees.Current; // BindingSource
Employee emp = new Employee();
if (item.GetType() == emp.GetType())
{
emp = (Employee)bsEmployees.Current;
EmployeeRepository.Delete(emp);
}
}
您在不同的會話和事務中讀取員工。問題在於調用Delete之前的代碼部分。 – Paco 2011-02-01 20:15:05