質問: EntityState.Modified; } ``` 上記の例では、削除されたエンティティを削除すると正常に機能しますが、問題は、そのエンティティにカスケード削除の子コレクションがある場合、子コレクションはEntity Frameworkによって追跡されず、削除済みとしてマークされません。 1つの簡単な解決策は、削除が起こる前に削除しようとしているEntityの子コレクションすべてを熱心にロードして、Efが子供の変更を追跡してソフト削除することでしたが、これは避けたいものです。エンティティ間のすべての関係と、削除が発生する直前のすべての熱意を覚えるのは難しいでしょう。また、モデルが変更された場合、これを維持することは難しいでしょう。 そのfuncionallityを達成するためのより良い方法はありますか? 編集1:私はこの質問がどのようにこれの
回答: 私はアプリケーション側ではなく、DBMS側で何かを試してみます。 私はMS SQL Serverを持っていると仮定します。 MS SQL Serverは、 "on cascade delete"と同様の方法で "on cascade update"をサポートしています。これは、主キーPersonIDを持つPersonテーブルと、PersonテーブルのPersonIDを参照するPersonID外部キーがあるCarテーブルがある場合、PersonIDの値をPersonIDに変更するたびに、関連レコードの外部キーが車もこの値で更新されます。 だからあなたのケースでは私は外国キーを変更することです。 2つのテーブルがあるとしましょう: Person:(PersonId、名前、年齢、IsDeleted) 車:(カードド、メイク、モデル、PersonId、IsDeleted) PersonIDはPersonのPK、CarIdはCarのPKです。また、Car.PersonIdをPerson.PersonIdを参照するFKにする代わりに、複合外部キー(Car.PersonId、Car.IsDeleted)=>(Person.PersonId、Person.IsDeleted)を作成し、 "on update cascade"この複合FKのオプション。 Person.PersonId(これは決してありません)やPerson.IsDeletedを変更するたびに、新しい値が対応するCar.PersonIdにカスケード更新されます(Person.PersonIdは変更されないため、カスケード更新されません)。車は削除されました。