2010-10-19 7 views
5

Kann mir jemand den Unterschied zwischen POCO, Self Tracking Entitäten, POCO Proxies zeigen?EF4: Unterschied zwischen POCO, Self Tracking Entitäten, POCO Proxies

Eigentlich arbeite ich Entity Framework 4.0 und POCO (Repository Pattern) und wann immer ich einige Änderungen in der POCO und ObjectContext.Savechanges aufrufen, dann spiegelt es in die DB. Meine Frage ist,

  1. Wie behebt der Kontext die Änderung der DB, da es nicht verfolgt wird?
  2. Erzeugt der Kontext die Tracking-Informationen im laufenden Betrieb für POCO?

Beispielcode ich verwende,

 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); 

Antwort

6

Selbst Tracking-Einheiten sind nicht POCOs. Im Gegenteil, sie sind sehr beharrlich. Mehr als EntityObject Einheiten, sogar. Was sie einzigartig macht, ist, dass die Änderungen auch dann verfolgt werden können, wenn sie nicht an eine ObjectContext angehängt sind.

"Pure" POCOs, wie Sie sagen, machen Änderungsverfolgung schwierig. Wirklich, das einzige, was Sie tun können, ist Snapshots des Objekts zu vergleichen. Der Objektkontext hat hierfür eine DetectChanges Methode.

Mit einem Pseudo-POCO-Proxy, was Sie wirklich haben, ist ein Typ, der zur Kompilierzeit (fast) wie ein POCO aussieht und wie ein Nicht-POCO zur Laufzeit. Ich sage "fast", weil Sie zur Laufzeit eine Instanz erhalten, die ein Untertyp des Kompilierzeittyps ist. Aus diesem Grund müssen alle Eigenschaften, für die Sie Änderungen verfolgen möchten, nicht privat und virtuell sein. Ähnliche Einschränkungen gelten für das verzögerte Laden. Sie können mehr darüber in this series of articles auf dem ADO.NET-Teamblog lesen.

+1

Danke Craig, und die Antwort für den zweiten Teil meiner Frage ist ProxyCreationEnabled sollte falsch sein. Bei der Arbeit mit POCO-Proxies generiert EF Proxy-Typen im laufenden Betrieb mithilfe von AssemblyBuilder und TypeBuilder im .NET-Framework. – paragy