0

後で EF Code First を使用してデータベースにマップするドメイン モデルを作成しています。これは Entity Framework を使用する初めてのプロジェクトであり、しばらく前に Entity Framework に関する本を読んだことがありますが、それがどのように機能するかの詳細をすべて思い出せません。

ドメイン モデルの一部では、1 対多の関係があります。

public class Parent
{
    public IList<Child> Children { get; private set; }
}

ユーザーが のメモリ内インスタンスを変更しParent、ボタンをクリックした後、そのインスタンスをデータベースに永続化します。その際、データベースに存在する (保存前の) インスタンスと、メモリ内にある未保存の変更済みバージョンとの間で、ドメイン固有の比較ロジックを実行する必要があります。そのため、データベースにクエリを実行して、変更されていないParentインスタンスとその複製を取得する必要がありますChildren

EF Code First では、このようなクエリを安全に実行できますか? EF がそのようなクエリを実行すると、それぞれが既にメモリ内にあることがわかり、Child重複をインスタンス化するのではなく、それらのインスタンスを再利用し、変更を上書きするのではないかと心配しています。この状況では、実際には重複が必要です。

4

1 に答える 1

0

コードを最初に使用すると、次のように、追跡されたオブジェクトの元の値と変更された値にアクセスできます。

Parent parent;
...
var curVal = context.Entry(parent).Property(p => p.Property).CurrentValue;
var origVal = context.Entry(parent).Property(p => p.Property).OriginalValue;

Children コレクションの個々の値でこれを行うこともできます

後続のクエリは、現在のデータベース値を持つエンティティの新しいセットを提供しますが、コンテキストが保持するキャッシュを確認したい場合は、ここで説明されているように非常に簡単です:

http://weblogs.asp.net/ricardoperes/archive/2012/03/19/entity-framework-code-first-get-entities-from-local-cache-or-the-database.aspx

于 2013-10-11T14:31:58.167 に答える