domingo, 9 de dezembro de 2012

Capturando Contexto (DataContext) de uma Entidade com Extesion e Reflection


Já se deparou com a necessidade de saber o Contexto a partir da entidade instanciada? Esses dias me deparei com essa necessidade, pois precisava capturar valores alterados na entidade para gravar em um log, foi ai que precisei dessa funcionalidade, eu construi ela como uma extensao de INotifyPropertyChanging não é a forma correta mas funciona mto bem quando trabalhamos com linq to sql e com EF.


        public static DataContext GetContext(this INotifyPropertyChanging objetoeto)

        {

            FieldInfo fEvent = objeto.GetType().GetField("PropertyChanging", BindingFlags.NonPublic | BindingFlags.Instance);

            MulticastDelegate dEvent = (MulticastDelegate)fEvent.GetValue(objeto);

            Delegate[] onChangingHandlers = dEvent.GetInvocationList();



          

            foreach (Delegate handler in onChangingHandlers)

            {

                if (handler.Target.GetType().Name == "StandardChangeTracker")

                {

                    objetoect tracker = handler.Target;

                    objetoect services = tracker.GetType().GetField("services", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(tracker);



                    DataContext context = services.GetType().GetProperty("Context").GetValue(services, null) as DataContext;

                    return context;

                }

            }





            throw new Exception("Erro ao capturar contexto");

        }

Nenhum comentário:

Postar um comentário