Entity Framework 4:Proxies – parte II
Olá pessoal, este é o segundo post falando sobre proxies no Entity Framework 4 CTP2. Desta vez vamos falar sobre o Change Tracking Proxy, este proxy é a nova opção do EF para manter o controle das alterações sofridas por um objeto.
1: public class Contact
2: {
3: public virtual Int32 ContactID { get; set; }
4: public virtual String Name { get; set; }
5: public virtual String Email { get; set; }
6: public virtual String Phone { get; set; }
7: public virtual String Address { get; set; }
8: public virtual Person Person { get; set; }
9: public virtual int PersonID { get; set; }
10: }
Nós vimos este tipo de código no LazyLoading. Na parte I vimos que um requisito do Change TrackingProxy é a definição de todas as propriedades como virtuais.
Quando usamos este tipo de proxy uma nova entidade é criada em Runtime, esta entidade possui a mesma interface do nosso tipo, fazendo com que não seja necessário identificar se estamos usando ou não o proxy.
O tipo do objeto é composto da keyword DynamicProxies_TipoDoObjeto_Hash de identificação do objeto de contexto.
Quando usamos este tipo de proxy todas as ações do objeto mapeado são interceptadas pelo o EF que mantém o histórico e integridade do mesmo. No exemplo acima a criação do objeto foi realizada com o método CreateObject do objeto context.
1: Contact c1 = ctx.CreateObject<Contact>();
2: c1.PersonID = p.PersonID;
Quando estamos trabalhando com este tipo de proxy não podemos instanciar os objetos manualmente, uma opção de prevenção é declarar o construtor do tipo como privado.
Este excelente post do ADO.NET Team contém vários métodos que podem ser usados com o change tracking proxy