2010-10-19 28 views
5

¿Alguien me puede señalar la diferencia entre POCO, Entidades de seguimiento automático, Proxies POCO?EF4: Diferencia entre POCO, entidades de seguimiento automático, POCO Proxies

En realidad, estoy trabajando Entity Framework 4.0 y POCO (Repository Pattern) y cada vez que hago algunos cambios en el POCO y llamo a ObjectContext.Savechanges entonces se refleja en el DB. Mi pregunta es

  1. ¿Cómo persiste el contexto en el cambio al DB ya que no se rastrea?
  2. ¿El contexto genera la información de seguimiento sobre la marcha para POCO?

ejemplo de código que estoy usando,

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

Respuesta

6

entidades de seguimiento Ser no son POCOs. Por el contrario, son muy conscientes de la persistencia. Más que las entidades EntityObject, incluso. Lo que los hace únicos es que los cambios se pueden rastrear incluso cuando no están conectados a un ObjectContext.

Las POCO "puras", como dices, dificultan el seguimiento de cambios. Realmente, lo único que puedes hacer es comparar instantáneas del objeto. El contexto del objeto tiene un método DetectChanges para esto.

Con un proxy pseudo-POCO, lo que realmente tiene es un tipo que se ve (casi) como un POCO en tiempo de compilación y como un POCO en tiempo de ejecución. Digo "casi" porque en tiempo de ejecución obtendrá una instancia que es un subtipo del tipo de tiempo de compilación. Debido a esto, las propiedades para las cuales desea realizar un seguimiento de los cambios deben ser no privadas y virtuales. Se aplican restricciones similares a la carga diferida. Puede leer más sobre esto en this series of articles en el blog del equipo ADO.NET.

+1

Gracias Craig, y la respuesta para la segunda parte de mi pregunta es ProxyCreationEnabled debe ser falso. Al trabajar con POCO Proxies, EF genera tipos de proxy sobre la marcha utilizando AssemblyBuilder y TypeBuilder en .NET Framework. – paragy

Cuestiones relacionadas