Ja 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 nao e 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"); } Esse e um livro indispensavel a qualquer Arquiteto que se prese.Aborda de forma pratica muitos padroes utilizados em aplicacoes comerciais, entao conhecer esse livro pre-requisito.Martin Fowler inicia brincando com o termo arquiteto dizendo existir 2 significados para o termo Arquiteto de Software, continua o livro discutindo padroes de Modelo, Apresentacao principalmente WEB, tambem discute a questao de trabalhar com banco de dados relacionar com linguagens orientada a objetos apresentando solucoes para alguns paradigmas. Nesse artigo iremos fazer uma conversao de dados em nossa entidade, em nosso exemplo possuimos uma entidade Usuario que possui uma propriedade chamada Status que guarda um Int que relaciona com o status do usuario. Esses status estao representados no enum StatusEnum, conforme abaixo: public enum StatusEnum { [Description("Usuario em Analise")] EmAnalise = 1, [Description("Usuario Autorizado")] Autorizado = 2, [Description("Usuario Banido")] Banido = 3, } Interessante e criar uma Classe Estatica Util com um metodo para capturar o Description e apresentar em nossa camada de Apresentacao. public static class Util { public static string ObterDescricaoStatusEnum(StatusSolicitacaoEnum valor) { FieldInfo fieldInfo = valor.GetType().GetField(valor.ToString()); DescriptionAttribute[] atributos = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); return atributos.Length > 0 ? atributos[0].Description ?? "Nulo" : valor.ToString(); } } Agora vamos dar uma olhada em nossa Entidade Usuario.Poderiamos fazer as alteracoes direto no codigo da entidade, mas caso estejamos usando um ORM como EF ou Linq to Sql teriamos um problema a cada atualizacao do banco de dados pois qualquer codigo que colocassemos seria sobrescrito. Para resolver esse problema o ideal e criamos uma classe separada para cada entidade, mas utilizando o PARTIAL e inserindo nossas regras, conforme exemplo abaixo: public partial class Usuario { string _StatusString; public string StatusString { get { switch (this.Status) { case 1: _StatusString = Util.ObterDescricaoStatusEnum(StatusSolicitacaoEnum.EmAnalise); break; case 2: _StatusString = Util.ObterDescricaoStatusEnum(StatusSolicitacaoEnum.Autorizado); break; case 3: _StatusString = Util.ObterDescricaoStatusEnum(StatusSolicitacaoEnumBanido); break; } return _StatusString; } } } Agora possuimo uma nova propriedade que podemos acessar via entidade, segue exemplo: Usuario usuario = new Usuario(); string Status = usuario.StatusString; AdendoNos comentarios, um desenvolvedor, sugeriu algumas melhorias, que apliquei apos corrigir um equivoco cometido pelo nosso colega, esse equivoco nos levava a possuir duplicacao de codigo, mas ao ajustar a ideia do companheiro o resultado ficou muito elegante segue o codigo: public static string ObterDescricao(this Enum valor) { FieldInfo fieldInfo = valor.GetType().GetField(valor.ToString()); DescriptionAttribute[] atributos = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); return atributos.Length > 0