2010-10-19 19 views
5

Quelqu'un peut-il me signaler la différence entre POCO, Entités Auto Tracking, Proxies POCO?EF4: Différence entre POCO, Entités Auto Tracking, Proxies POCO

En fait, je travaille Entity Framework 4.0 et POCO (Repository Pattern) et chaque fois que je fais quelques changements dans le POCO et appel ObjectContext.Savechanges puis il reflète à la DB. Ma question est,

  1. Comment le contexte du changement persistent DB car il n'est pas suivi?
  2. Le contexte génère-t-il les informations de suivi à la volée pour POCO?

Exemple de code J'utilise,

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

Répondre

6

entités de suivi auto ne sont pas Poços. Au contraire, ils sont très sensibles à la persistance. Plus encore que EntityObject entités, même. Ce qui les rend uniques, c'est que les changements peuvent être suivis même s'ils ne sont pas attachés à un ObjectContext.

Les POCO «purs», comme vous le dites, rendent difficile le suivi des changements. Vraiment, la seule chose que vous pouvez faire est de comparer les instantanés de l'objet. Le contexte d'objet a une méthode DetectChanges pour cela. Avec un pseudo-proxy POCO, ce que vous avez vraiment est un type qui ressemble (presque) à un POCO au moment de la compilation et comme un non-POCO au moment de l'exécution. Je dis "presque" parce qu'à l'exécution, vous obtiendrez une instance qui est un sous-type du type à la compilation. Pour cette raison, les propriétés pour lesquelles vous souhaitez effectuer le suivi des modifications doivent être non privées et virtuelles. Des restrictions similaires s'appliquent au chargement paresseux. Vous pouvez en lire plus à ce sujet dans this series of articles sur le blog de l'équipe ADO.NET.

+1

Merci Craig, et répondre à la deuxième partie de ma question est ProxyCreationEnabled devrait être faux. En travaillant avec les proxies POCO, EF génère des types de proxy à la volée en utilisant AssemblyBuilder et TypeBuilder dans le framework .NET. – paragy