5

誰かが POCO 、 Self Tracking Entities 、 POCO Proxies の違いを指摘できますか?

実際、私はEntity Framework 4.0とPOCO(Repository Pattern)に取り組んでおり、POCOに変更を加えてObjectContext.Savechangesを呼び出すたびに、DBに反映されます。私の質問は、

  1. 追跡されていないため、Context はどのように変更を DB に永続化しますか?
  2. Context は POCO の追跡情報をオンザフライで生成しますか?

私が使用しているサンプルコード、

        IEFRepository<Category> catRepository = new EFRepository<Category>();
        Category c = catRepository.FindOne<Category>(x => x.Name == "Paper");

        c.Name = "Paper";
        catRepository.SaveChanges(System.Data.Objects.SaveOptions.None);
4

1 に答える 1

6

自己追跡エンティティはPOCOではありません。それどころか、それらは非常に永続性を認識しています。EntityObject実体よりもそうです。それらをユニークにしているのは、に接続されていない場合でも変更を追跡できることObjectContextです。

「純粋な」POCOは、あなたが言うように、変更の追跡を困難にします。実際にできることは、オブジェクトのスナップショットを比較することだけです。オブジェクトコンテキストには、DetectChangesこのためのメソッドがあります。

疑似POCOプロキシを使用すると、実際に使用できるのは、コンパイル時には(ほぼ)POCOのように見え、実行時には非POCOのように見えるタイプです。実行時にコンパイル時タイプのサブタイプであるインスタンスを取得するため、「ほぼ」と言います。このため、変更を追跡するプロパティは、非プライベートで仮想である必要があります。同様の制限が遅延読み込みにも適用されます。これについて詳しくは、ADO.NETチームのブログにあるこの一連の記事を参照してください。

于 2010-10-19T14:28:06.590 に答える