Gerando registros de log automáticos com o Entity Framework

Uma tarefa bastante recorrente durante o desenvolvimento de sistemas é a criação de rotinas de log. E o Entity Framework facilita a nossa vida quando temos de fazer isso.

Com o Entity Framework podemos criar uma customização que encapsule os comandos que serão enviados para o banco de dados e então adicionar uma lógica que gere os registros de log necessários para cada operação.

log de dados

Leia mais »

Construindo camadas de acesso a dados – Parte V – Unity of Work

O padrão Unit of Work mantém um rastreamento sobre todas as alterações que possam alterar sua fonte de dados durante uma transação. Assim, quando todas as alterações já tiverem sido executadas o padrão fica responsável por persistir todas na fonte de dados.

Geralmente, não somos responsáveis por implementar este padrão, acabamos por consumi-lo em ferramentas de persistência, como: Entity Framework, NHibernate e LINQ to SQL.

Leia mais »

NOLOCK = READ UNCOMMITED = Leitura Suja

Trabalhando em alguns sistemas, nos foi recomendado, pelo próprio cliente, que fizéssemos uso do operador NOLOCK em todos os comandos de consulta que fizéssemos no banco de dados. Isso parece uma atitude exagerada, mas por experiência do cliente, com receio de deadlocks, tínhamos de seguir à risca essa indicação.

You no lock?

O SQL Server utiliza recursos de bloqueio (tanto para escrita quanto leitura) para garantir a integridade dos dados. Enquanto executamos uma transação seguimos o conceito ACID (se você não conhece este conceito, veja este post Entity Framework 6 – Database.BeginTransaction() e Database.UseTransaction(DbTransaction)). Por conta disso, dentro de uma transação qualquer comando paralelo que tente acessar os dados com os quais estamos trabalhando entram nesse bloqueio, e assim são forçados a aguardar o término de nossa transação.

Leia mais »

Entity Framework – Melhores práticas em busca de performance

Separei neste post algumas dicas de como tornar suas aplicações com Entity Framework mais performáticas. As dicas abaixo se resumem a um grupo de boas práticas que costumo aplicar em meus projetos. Algumas desta dicas não se aplicam apenas ao Entity Framework, mas se aplicam a outras ferramentas ORM ou técnicas de modelagem de sua camada de acesso a dados.

Tornando sua aplicação mais performática

Leia mais »

WCF e Protection Level

Windows Communication Foundation é uma plataforma distribuída orientada a mensagens SOAP. Dentre suas principais características podemos destacar os recursos de segurança entre mensagens cliente/servidor. Atualmente tais recursos são essenciais para proteção dos nossos dados.

Dentre os recursos de segurança dos serviços WCF encontramos os níveis de proteção (protection levels) dos envelopes SOAP. Tais níveis de proteção são responsáveis por proteger a comunicação cliente/servidor contra interceptações e alterações indevidas.

Estes recursos são necessários para garantir a confidencialidade dos dados, prevenindo o extravio, a alteração ou a leitura dos dados por outros.

Leia mais »

Entity Framework 6 – Database.BeginTransaction() e Database.UseTransaction(DbTransaction)

Ao falarmos sobre transações é bastante comum ouvir sobre o acrônimo ACID (Atomicidade, Consistência, Isolamento e Durabilidade). O conceito ACID descreve características necessárias em uma transação, sendo estes conceitos:

Atomicidade: uma transação é uma sequência de operações tratadas como um bloco único e indivisível. Todas as suas operações devem ser executadas com sucesso ou nenhum resultado será refletido na base de dados.

Consistência: a execução de uma transação deve manter a integridade dos dados.

Isolamento: transações paralelas não devem interferir na execução umas das outras. Existem diferentes tipos de isolamentos, algo que veremos a seguir.

Durabilidade: ao executar com sucesso, os efeitos da transação (os dados alterados, inseridos e excluídos) devem estar disponíveis em definitivo.

acid

Leia mais »

Entity Framework 6 – Crie uma instância de DbContext por meio de uma instância de um DbConnection

Um dos novos recursos disponíveis no Entity Framework 6 é a possibilidade de criar novas instâncias de contexto utilizando uma instância de DbConnection ativa. Operações que mesclam comandos em ADO.Net e com o Entity Framework podem fazer uso deste recurso.

No Entity Framework 6, a classe DbContext ganhou novas assinaturas para seus construtores, permitindo o uso de uma instância ativa de DbConnection para criação de um novo contexto. Para ver todos os construtores disponíveis na classe DbContext acesse este link: http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.103).aspx

Desenho1

Leia mais »

Controle de instâncias entre requisições de serviços WCF

O WCF provê três modelos diferente de controle de instâncias, sendo estes modelos:

Per call instance mode – Uma nova instância do serviço WCF é criada para cada chamada de método invocada por um cliente e destruida após a resposta ser enviada.

Per session instance mode – Apenas uma instância de um serviço é criada para um conjunto de integrações com o cliente. A instância do serviço só é destruída quando o cliente termina suas requisições.

Single instance mode – Uma instância global do serviço é criada, e desta forma fica responsável por receber e processar todas as requisições de todos os clientes.

Leia mais »