2

エンティティ モデルからいくつかのデータを取得しています。これには、アイテムの属性が含まれています。たとえば、最高速度、重量、サイズの車の部品です。多くのパーツがあり、基本属性が変更されないため、すべてのレコードをキャッシュしました。

これらのパーツが使用されている車によっては、これらの属性が変更される可能性があるため、新しい車をセットアップし、キャッシュされたアイテム「Engine」から値を新しい車のオブジェクトにコピーしてから、「TurboCharger」を追加します。これにより、最高速度が向上します。 、エンジンの重量とサイズ。

私が直面している問題は、Entity モデルがまだコンテキストを追跡してキャッシュされたデータに戻っているように見えることです。そのため、ローカル メソッドで重みを増やすと、すべてのユーザーの重みが増えます。「MergeOption.NoTracking」をコンテキストに追加しようとしましたが、これはすべてのエンティティ追跡を削除するはずですが、まだ追跡しているようです。キャッシュをオフにすると、毎回データベースから新しい値が取得されるため、正常に機能します。

エンティティ モデルからレコードをコピーしたい場合、「オブジェクトをコピーしますが、エンティティからの履歴がない標準オブジェクトとして扱います」と言う方法はありますか?それは単なる平らなオブジェクトですか?

乾杯!

4

1 に答える 1

2

コンテキスト全体のMergeOption.NoTrackingとそれが何をするのかについてはよくわかりませんが、代わりにデータベースからクエリに.AsNoTracking()を追加することもできます。これにより、分離されたオブジェクトが確実に返されます。AsNoTrackingの使用法の詳細については、こちらをご覧ください:http: //blog.staticvoid.co.nz/2012/04/entity-framework-and-asnotracking.html

もう1つは、キャッシュに挿入する前にコレクションを列挙して、クエリ可能オブジェクト内で動作しないようにすることです。つまり、.ToArray()を使用します。

もう1つのオプションは、オブジェクトをコンテキストから手動でデタッチすることです(Detach(Tエンティティ)を使用)。

于 2012-04-18T04:29:21.593 に答える