質問: this.Context.SaveChanges(); } ``` `count`は常にゼロであり、データベースは更新されません。 私はこれをデバッグしようとする他の何がわからない。
回答: エンティティをコンテキストにアタッチしても、変更されたものとしてマークされません。 あなたのケースでは、 `SaveChanges()`を呼び出すコンテキストインスタンスが`fileRowEntity`オブジェクトを取得したコンテキストインスタンスと同じではないため、オブジェクトが変更された(または変更された)ことを知らないという`fileRowEntity`ます。 `DbContext`がストアからオブジェクトを取得すると、そのクエリで`AsNoTracking()`を使用していない限り、元の値のコピーが格納されます。また、 `DetectChanges()`呼び出しによって変更が検出されるたびに明示的に通常の`DbContext`実装は多くの点でそれを呼び出します)、新しいオブジェクト値が格納されます。それらの間に相違がある場合、次の`SaveChanges`呼び出しはストア/データベース内のエンティティを更新します。 エンティティをアタッチしても変更されたものとしてマークしていない場合は、何も変更されていないことがわかります。そのため、エンティティを明示的に変更済みとしてマークできます。 `Context.Entry(fileRowEntity).State = EntityState.Modified;`を使用して`Context.Entry(fileRowEntity).State = EntityState.Modified;`あなたのエンティティが変更されたことをEFに伝え、Entity全体に対して`SaveChanges()`を呼び出すとupdateコマンドを生成します( `UPDATE` SQLのすべてのフィールド値を送信します)。これを行うと、エンティティがコンテキストにアタッチされていない場合でもエンティティがアタッチされます(アタッチして状態を設定する必要はありません)。 また、変更されたプロパティのみをマークする(または`OriginalValues`エンティティを変更する)こともできます。これにより、クエリが最適化されます(実際に変更されたフィールドのみが更新されます)。これらの変更を自分で追跡するのはちょっと面倒ですが、追加の最適化が必要な場合は、一発の価値があります(個人的にはデータベースサーバーに重大な負荷がかからず、すべてのビットがカウントされない限り、