EFを使ってCRUD操作を実行するためのベストプラクティスを検索しながら、エンティティを更新する前にAttach()
またはFind()
メソッドを使用することを強くお勧めします。それはうまく動作し、EFのドキュメントによれば、これらのメソッドはエンティティをコンテキストにフェッチしてくれます。しかし、後続のコードは私をかなり混乱させました。Entity Framework 6の更新にAttachを使用する理由
public void Update(object entity)
{
Record record = new Record() {
id = 1,
value = 5
};
using (SomeContext ctx = new SomeContext())
{
ctx.Entry(record).State = EntityState.Modified;
ctx.SaveChanges();
}
}
データベースにid = 1のレコードがあるとします。この状態で上記のコードはレコードを更新します(値を5に設定)。問題はそれがなぜ機能するのか?そして、なぜ私はAttach()
を使うべきですか?私が理解している限り、その記録は文脈には決して添付されませんでした。私はthis本とthe tutorialの関連する章を読んでいますが、2つのクエリーアプローチを使用しています。また、私はSOをサーフしましたが、私の質問に答えが見つかりませんでした。説明や良いmatherialsで私を助けてください。
ありがとう、しかし、このレコードは現在、コンテキストによって追跡されている理由はありますか? –
エンティティが現在追跡されていて、一部のプロパティを変更した場合、エンティティの状態はトラッキングの変更によって「Modified」に変更されますが、エンティティはこの[要件]を満たす必要があります(https://msdn.microsoft.com/ en-us/library/dd468057(v = vs.100).aspx) – octavioccl
私はこれを[リンク](https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449331825/ch04s03.html)と考えています。 )あなたのすべての質問に回答することができます – octavioccl