我有客户和银行账户。一个客户可以有多个银行账户,但一个银行账户可以有一个客户。
我正在尝试通过其 ID 删除银行帐户。但是当我们删除东西时,我们实际上是通过将 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);
}
当我删除“根”实体(如客户)时效果很好,但是当我尝试删除“子”实体(如银行账户)时,我得到了这个异常:
来自“CustomerBankAccounts”AssociationSet 的关系处于“已删除”状态。给定多重约束,相应的“BankAccount”也必须处于“已删除”状态。
我不确定为什么会收到此错误。我只是更新我的银行帐户,而不是删除它。有人可以解释为什么我会得到这个异常以及如何解决这个问题吗?