私には顧客と銀行口座があります。顧客は複数の銀行口座を持つことができますが、銀行口座は 1 つの顧客を持つことができます。
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」も「削除済み」状態でなければなりません。
このエラーが発生する理由がわかりません。銀行口座を削除するのではなく、更新するだけです。この例外が発生する理由と、これを修正する方法を誰かが説明できますか?