我有客戶和銀行帳戶。客戶可以有多個銀行帳戶,但銀行帳戶可以有一個客戶。因爲關聯集,EF無法刪除子對象
我試圖通過它的id刪除bankaccount。但是當我們刪除東西時,我們通過將IsActive屬性設置爲false來實際執行更新。
我刪除的部分是這樣的:
var bankaccounts = from b in this.unitOfWork.BankAccounts
where command.Ids.Contains(b.Id) // command.ids is an array with id's
select b;
this.unitOfWork.BankAccounts.DeleteObject(bankaccounts);
然後,提交之前,我們有這樣的代碼,將轉換爲刪除成更新,並設置IsActive屬性設置爲false
public void Commit()
{
var addedEntities = this.GetEntitiesByState(EntityState.Added);
foreach (var entity in addedEntities)
{
var property = this.GetIsActiveProperty(entity);
property.SetValue(entity.Entity, true);
}
var deletedEntities = this.GetEntitiesByState(EntityState.Deleted);
foreach (var entity in deletedEntities)
{
var property = this.GetIsActiveProperty(entity);
if (property != null)
{
entity.State = EntityState.Modified;
property.SetValue(entity.Entity, false);
}
}
this.mapper.Commit();
}
private IEnumerable<DbEntityEntry> GetEntitiesByState(EntityState state)
{
return this.context.ChangeTracker.Entries().Where(e => e.State == state);
}
private PropertyInfo GetIsActiveProperty(DbEntityEntry entity)
{
return entity.Entity.GetType().GetProperty("IsActive", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
}
當我刪除「根」實體(如客戶)時,這很有效,但是當我嘗試刪除「子」實體時,例如bankaccount,我得到以下異常:
來自'CustomerBankAccounts'AssociationSet的關係在 '已刪除'狀態。由於多重性限制,相應的「BankAccount」也必須處於「已刪除」狀態。
我不知道爲什麼我得到這個錯誤。我只是更新我的銀行帳戶,而不是刪除它。有人可以解釋爲什麼我會得到這個例外,我該如何解決這個問題?
題外話:我發佈了這個問題。可能是你可以回答它:http://stackoverflow.com/questions/17588993/ef-what-is-the-sql-output-when-using-contains-in-linq-query – mynkow