{"id":34,"date":"2013-06-25T17:54:13","date_gmt":"2013-06-25T20:54:13","guid":{"rendered":"http:\/\/www.hectordufau.com.br\/wp\/?p=34"},"modified":"2014-01-05T05:49:55","modified_gmt":"2014-01-05T08:49:55","slug":"proposta-de-arquitetura-parte-4-acesso-a-dados","status":"publish","type":"post","link":"https:\/\/www.hectordufau.com.br\/wp\/?p=34","title":{"rendered":"Proposta de Arquitetura &#8211; Parte 4 &#8211; Acesso a Dados"},"content":{"rendered":"<p>Neste artigo vamos conhecer as classes que s\u00e3o respons\u00e1veis pelo acesso aos dados, realizando a cria\u00e7\u00e3o, atualiza\u00e7\u00e3o exclus\u00e3o e consulta dos registros, atrav\u00e9s dos objetos que representam as tabelas do banco (entidades).<\/p>\n<p>&nbsp;<\/p>\n<p><!--more--><\/p>\n<p>Come\u00e7aremos pela interface <em><strong>IRepositorioCAD<\/strong><\/em>:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>************ IRepositorioCAD.cs\u00a0<span style=\"line-height: 1.3em;\">************<\/span><\/strong><\/span><\/p>\n<p><span style=\"line-height: 1.3em;\">\u00a0<\/span><\/p>\n<p><span style=\"line-height: 1.3em; color: #000080;\">using System;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Collections.Generic;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Metadata.Edm;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Objects;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Objects.DataClasses;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Linq.Expressions;<\/span><\/p>\n<p><span style=\"color: #000080;\">using HLMI.Cadastro.CES;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">namespace HLMI.Cadastro.CAD<\/span><\/p>\n<p><span style=\"color: #000080;\">{<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 public interface IRepositorioCAD&lt;T&gt; where T : EntityObject<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 T VerRegistroPorCodigo(int codigo);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 T Salvar(T registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 bool Atualizar(T registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 bool Excluir(T registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 EntitySetBase VerEntidadeBase(ObjectContext context, Type entityType);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarTodos();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4, Expression&lt;Func&lt;T, bool&gt;&gt; expression5);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4, Expression&lt;Func&lt;T, bool&gt;&gt; expression5, Expression&lt;Func&lt;T, bool&gt;&gt; expression6);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>***************************************<\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>O objetivo de uma interface \u00e9 separar o nome do metodo da sua implementa\u00e7\u00e3o, assim como um objeto pode ser referenciado atrav\u00e9s da sua interface. Quando uma classe que implementa uma interface for criada, podemos instanciar esta classe atrav\u00e9s da sua interface, ou criar m\u00e9todos que tem como par\u00e2metros uma interface, assim qualquer classe que a implemente pode ser utilizada neste par\u00e2metro. Essa \u00e9 uma caracter\u00edstica da heran\u00e7a na programa\u00e7\u00e3o orientada a objetos.<\/p>\n<p>&nbsp;<\/p>\n<p>A classe a seguir implementa a interface que apresentamos, e ela \u00e9 a classe base para manipularmos todas as entidades. \u00c9 a classe <strong><em>BaseCAD<\/em><\/strong>:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>*********** BaseCAD.cs ******************<\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000080;\">using System;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Collections.Generic;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Metadata.Edm;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Objects;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Data.Objects.DataClasses;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Linq;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Linq.Expressions;<\/span><\/p>\n<p><span style=\"color: #000080;\">using HLMI.Cadastro.CES;<\/span><\/p>\n<p><span style=\"color: #000080;\">using LinqKit;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">namespace HLMI.Cadastro.CAD<\/span><\/p>\n<p><span style=\"color: #000080;\">{<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 public class BaseCAD&lt;T&gt; : \u00a0IRepositorioCAD&lt;T&gt; where T : EntityObject<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #region Atributos<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 private HLMI_CadastroEntities entidades;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 private IObjectSet&lt;T&gt; objeto;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 private ObjectSet&lt;T&gt; en;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public HLMI_CadastroEntities Entidades<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 get { return entidades; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 set { entidades = value; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public IObjectSet&lt;T&gt; Objeto<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 get { return objeto; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 set { objeto = value; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public ObjectSet&lt;T&gt; En<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 get { return en; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 set { en = value; }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #endregion<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #region Construtor<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public BaseCAD()<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Entidades = new HLMI_CadastroEntities();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 En = Entidades.CreateObjectSet&lt;T&gt;();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Objeto = En;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #endregion<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #region Sem Auditoria<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public T Salvar(T registro)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 En.MergeOption = MergeOption.NoTracking;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Objeto.AddObject(registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Entidades.SaveChanges();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 catch (Exception e)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return registro;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public bool Atualizar(T registro)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EntityKey key;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 object originalItem;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 En.MergeOption = MergeOption.NoTracking;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 key = Entidades.CreateEntityKey(VerEntidadeBase(Entidades, registro.GetType()).Name, registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (Entidades.TryGetObjectByKey(key, out originalItem))<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Entidades.ApplyCurrentValues(key.EntitySetName, registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Entidades.SaveChanges();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 catch (Exception e)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return false;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return true;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public bool Excluir(T registro)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EntityKey key;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 En.MergeOption = MergeOption.NoTracking;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 key = Entidades.CreateEntityKey(VerEntidadeBase(Entidades, registro.GetType()).Name, registro);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var obj = (T)Entidades.GetObjectByKey(key);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Objeto.DeleteObject(obj);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Entidades.SaveChanges();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 catch (Exception e)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return false;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return true;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #endregion<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #region Consultas<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public T VerRegistroPorCodigo(int codigo)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string containerName = Entidades.DefaultContainerName;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string setName = Entidades.CreateObjectSet&lt;T&gt;().EntitySet.Name;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var entityKey = new EntityKey(containerName + &#8220;.&#8221; + setName, &#8220;Id&#8221;, codigo);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return (T)Entidades.GetObjectByKey(entityKey);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarTodos()<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return Objeto.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression1.Compile()).Where(expression2.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression1.Compile()).Where(expression2.Compile()).Where(expression3.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression1.Compile()).Where(expression2.Compile()).Where(expression3.Compile()).Where(expression4.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4, Expression&lt;Func&lt;T, bool&gt;&gt; expression5)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression1.Compile()).Where(expression2.Compile()).Where(expression3.Compile()).Where(expression4.Compile()).Where(expression5.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;T&gt; ListarPorExpressao(Expression&lt;Func&lt;T, bool&gt;&gt; expression1, Expression&lt;Func&lt;T, bool&gt;&gt; expression2, Expression&lt;Func&lt;T, bool&gt;&gt; expression3, Expression&lt;Func&lt;T, bool&gt;&gt; expression4, Expression&lt;Func&lt;T, bool&gt;&gt; expression5, Expression&lt;Func&lt;T, bool&gt;&gt; expression6)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var retorno = Entidades.CreateObjectSet&lt;T&gt;().AsExpandable().Where(expression1.Compile()).Where(expression2.Compile()).Where(expression3.Compile()).Where(expression4.Compile()).Where(expression5.Compile()).Where(expression6.Compile());<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno != null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (retorno.Count() &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return retorno.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #endregion<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #region Auxiliar<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public EntitySetBase VerEntidadeBase(ObjectContext context, Type entityType)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (context == null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw new ArgumentNullException(&#8220;context&#8221;);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (entityType == null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw new ArgumentNullException(&#8220;entityType&#8221;);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EntityContainer container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (container == null)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return null;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 EntitySetBase entitySet = container.BaseEntitySets.Where(item =&gt; item.ElementType.Name.Equals(entityType.Name)).FirstOrDefault();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return entitySet;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 #endregion<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>***************************************<\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>A classe <strong><em>BaseCAD<\/em> <\/strong>permite realizar as principais opera\u00e7\u00f5es com qualquer entidade do sistema. Por exemplo: se quero consultar uma entidade <em><strong>Cliente<\/strong> <\/em>atrav\u00e9s do seu ID, podemos usar o m\u00e9todo <em>VerRegistroPorCodigo<\/em> da seguinte forma:<\/p>\n<p>&nbsp;<\/p>\n<p><strong>BaseCAD&lt;Cliente&gt; base = new BaseCAD&lt;Cliente&gt;();<\/strong><\/p>\n<p><strong>Cliente cliente = base.VerRegistroPorCodigo(1);<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>onde o valor 1 (um) \u00e9 o valor do Id no registro que est\u00e1 no banco de dados, e o retorno \u00e9 o objeto cliente preenchido com todos os artributos que retornaram do banco de dados.<\/p>\n<p>&nbsp;<\/p>\n<p>Estas duas classes devem ser criadas no projeto HLMI.Cadastro.CAD, e podemos criar outras classes que herdam de <em><strong>BaseCAD<\/strong> <\/em>para acesso aos dados das entidades. Por exemplo: caso eu queira criar uma consulta espec\u00edfica para <em><strong>Cliente<\/strong><\/em>, ent\u00e3o devo criar a classe <em><strong>ClienteCAD<\/strong> <\/em>(observe a nomenclatura) que herda de <strong><em>BaseCAD<\/em><\/strong>, da seguinte forma:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>*********** ClienteCAD *******************<\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000080;\">using System.Collections.Generic;<\/span><\/p>\n<p><span style=\"color: #000080;\">using System.Linq;<\/span><\/p>\n<p><span style=\"color: #000080;\">using HLMI.Cadastro.CES;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">namespace HLMI.Cadastro.CAD<\/span><\/p>\n<p><span style=\"color: #000080;\">{<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 public class ClienteCAD : BaseCAD&lt;Cliente&gt;<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 public List&lt;Cliente&gt; VerRegistro(Cliente registro)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 List&lt;Cliente&gt; consulta = this.ListarTodos();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (registro.Id &gt; 0)<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consulta = consulta.Where(c =&gt; c.Id == registro.Id).ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (!string.IsNullOrEmpty(registro.NomeCliente))<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consulta = consulta.Where(c =&gt; c.NomeCliente.Contains(registro.NomeCliente)).ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (!string.IsNullOrEmpty(registro.Endereco))<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consulta = consulta.Where(c =&gt; c.Endereco.Contains(registro.Endereco)).ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return consulta.ToList();<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0 \u00a0 }<\/span><\/p>\n<p><span style=\"color: #000080;\">\u00a0<\/span><\/p>\n<p><span style=\"color: #000080;\">}<\/span><\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<p><span style=\"color: #ff0000;\"><strong>***************************************<\/strong><\/span><\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<p>O m\u00e9todo <em>VerRegistro<\/em> \u00e9 um m\u00e9todo exclusivo da classe <em><strong>ClienteCAD<\/strong><\/em>, que auxilia na consulta ao cliente pelo nome ou pelo endere\u00e7o, se estiverem preenchidos. Ou seja, em um formul\u00e1rio de consulta, este m\u00e9todo retorna uma lista de acordo com os campos informados no formul\u00e1rio (digamos que sejam apenas dois: nome e endere\u00e7o).<\/p>\n<p>&nbsp;<\/p>\n<p>No pr\u00f3ximo artigo, abordaremos das classes da camada de l\u00f3giga de neg\u00f3cios (CLN).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo vamos conhecer as classes que s\u00e3o respons\u00e1veis pelo acesso aos dados, realizando a cria\u00e7\u00e3o, atualiza\u00e7\u00e3o exclus\u00e3o e consulta dos registros, atrav\u00e9s dos objetos que representam as tabelas do banco (entidades). &nbsp;<\/p>\n","protected":false},"author":1,"featured_media":33,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[30],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.hectordufau.com.br\/wp\/wp-content\/uploads\/2013\/06\/code.jpg?fit=1200%2C900&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4cTO8-y","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":6,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":116,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/116"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/media\/33"}],"wp:attachment":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}