子エンティティの null 非許容の外部キー列と 1 対多の関係があります。子テーブルからレコードを削除しようとしていますが、機能していないようです。
次のようなメッセージが表示されます - 参照整合性制約違反が発生しました: 関連付けのプリンシパル オブジェクトに設定されていない限り、依存オブジェクトが変更されていない場合、参照整合性制約の一部である主キー プロパティを変更できません。プリンシパル オブジェクトを追跡し、削除のマークを付けないようにする必要があります
context.Set().Remove(entity)... を呼び出すだけでオブジェクトを削除しようとしています...
親コレクションからエンティティを削除してから、変更の保存を呼び出す前に削除しようとしました。また、子エンティティを直接削除しようとしましたが、何をしても機能しないようです。
エンティティフレームワーク5でnull不可の外部キー関係を持つ子エンティティを削除する適切な方法は何ですか?
ここに私のマッピング設定があります:
これは動作します -
var item = this.unitOfWork.PersonalListItemRepository.GetFirst(x => x.PersonalListID == 45146 && x.ItemCode == "1030943" && x.UOM == "EA");
this.unitOfWork.PersonalListItemRepository.Delete(item);
削除の実装は単純です-
this.context.Set<T>().Remove(item);
ただし、これは機能しません-
var listToUpdate =
this.unitOfWork.PersonalListRepository.FindByExpression(
x => x.PersonalListID == personalList.PersonalListID).First();
var entityToDelete = listToUpdate.PersonalListItems.First();
this.unitOfWork.PersonalListItemRepository.Delete(entityToDelete);
FindByExpressionの実装 --
public ICollection<T> FindByExpression(Expression<Func<T, bool>> expression)
{
return context.Set<T>().Where(expression).ToList();
}
また、親エンティティ コレクションからアイテムを削除して、親を更新しようとしました。削除する必要がある子のリストを取得したら、コンテキストからそれらをリロードしてから削除できると思います(ただし、アイテムが最初からコンテキストからロードされているため、これは不要のようです)。私はここで何か大きなものを見逃しているに違いない...