Linq to SQL – Catalogando Log (SQL query/Command) do Linq em arquivos externos

Standard

Um recurso bem interessante que temos no Linq (toSQL e Entity), é a possibilidade de catalogar e analisar as queries que são geradas. Ou seja, como o linq gerencia a forma de geração do código SQL/command a ser executado efetivamente na base de dados, podemos com este recurso, verificar se nossa query linq está sendo processada da melhor forma possível e com a melhor performance.

Para tanto, vamos primeiramente criar uma estrutura para a realização de uma query bem simples, veja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Cria contexto de dados
DBDataContext _db = new DBDataContext();

// Efetua uma query
var query = from p in _db.Produtos
where p.valor.HasValue
select p;

// Registra LOG com a query gerada pelo LINQ
_db.Log = new LogQueryLinq();

// Percorre a query e mostra ao usuário cada produto
foreach (var p in query)
Console.WriteLine(string.Format("Produto:{0} | Valor Total{1}", p.nome, p.valor ));

Continue reading

Resumo de artigos publicados no TechNet Wiki até hoje (13/07/2012)

Standard

Para você que não conhece o TechNet Wiki tenho uma coisa para contar, você está perdedo tempo, além de uma grande variedade de temas e conteúdos, existe uma página totalmente em pt-BR. Wink

Atualmente, na página de Desenvolvimento existem diversos artigos interessantes, no total, eu já publiquei 15 artigos, alguns deles já publicados aqui também!

Veja abaixo minhas publicações até hoje 13/07/2012:

 

ASP.NET MVC

ASP.NET MVC – Autenticação Básica
http://social.technet.microsoft.com/wiki/contents/articles/6466.aspx

ASP.NET MVC – Verificando se a Action solicitada existe em uma requisição
http://social.technet.microsoft.com/wiki/contents/articles/6465.aspx

ASP.NET MVC – Evitando ataques de Redirecionamento
http://social.technet.microsoft.com/wiki/contents/articles/6464.aspx

ASP.NET MVC – Validando os parâmetros na requisição de uma URL
http://social.technet.microsoft.com/wiki/contents/articles/6490.asp-net-mvc-validando-os-parametros-na-requisicao-de-uma-url-pt-br.aspx

ASP.NET MVC – Criando uma aplicação multi-idiomas
http://social.technet.microsoft.com/wiki/contents/articles/6491.aspx

ASP.NET MVC – Renderizando Gráficos do Google Chart com Html Helpers
http://social.technet.microsoft.com/wiki/contents/articles/6505.aspx

ASP.NET MVC – Criando uma aplicação MVC compatível com o Windows Azure
http://social.technet.microsoft.com/wiki/contents/articles/6777.asp-net-mvc-criando-uma-aplicacao-mvc-compativel-com-o-windows-azure-pt-
br.aspx

ASP.NET MVC – Trabalhando com vários Submits na mesma View
http://social.technet.microsoft.com/wiki/contents/articles/7374.asp-net-mvc-trabalhando-com-varios-submits-na-mesma-view-pt-br.aspx

 

Windows Azure

Windows Azure – Entendendo as principais Roles
http://social.technet.microsoft.com/wiki/contents/articles/6778.windows-azure-entendendo-as-principais-roles-pt-br.aspx

 

Linq to SQL

Linq to SQL – Trabalhando com Stored Procedures simples
http://social.technet.microsoft.com/wiki/contents/articles/6484.linq-to-sql-trabalhando-com-stored-procedures-simples-pt-br.aspx

Linq to SQL – Trabalhando com Stored Procedures complexas
http://social.technet.microsoft.com/wiki/contents/articles/6485.aspx

Linq to SQL – Escrevendo diretamente com SQL
http://social.technet.microsoft.com/wiki/contents/articles/6486.aspx

Linq to SQL – Utilizando Compiled Query
http://social.technet.microsoft.com/wiki/contents/articles/6487.aspx

Linq to SQL – Adicionando Validações
http://social.technet.microsoft.com/wiki/contents/articles/6488.aspx

Paginação com Linq utilizando Skip e Take
http://social.technet.microsoft.com/wiki/contents/articles/6489.aspx

Você é “dev”? Contribua também!

Abs

 

Criando um repositório genérico para Linq to SQL

Standard

Vou demonstra aqui uma forma bem rápida e produtiva para criarmos um repositório genérico com Linq to SQL. Basicamente devemos efetuar quatro operações básicas: Selecionar os dados, salvar, apagar e atualizar.

Vejamos como ficaria nossa interface para o repositório genérico:

public interface IRepositorio
{
   void Atualiza();

   void Apaga<TEntidade>(TEntidade entidade) where TEntidade : class;

   void Salva<TEntidade>(TEntidade entidade) where TEntidade : class;

   IQueryable<TEntidade> Seleciona<TEntidade>() where TEntidade : class;
}

Pegou a idéia com Generics? veja a implementação: Continue reading

Dica Rápida – Default Values com Linq to SQL

Standard

Sabemos que no Sql Server podemos criar colunas de tabelas com valores padrão, ou seja, valores default que serão utilizados caso não passe valor algum para o campo.

Veja a tabela abaixo:

CREATE TABLE TabelaTeste
(
Cod INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
Nome VARCHAR(100) NOT NULL DEFAULT('Zaccanini'),
Valor DECIMAL(18,2) NOT NULL DEFAULT(100), 
Data DATETIME NOT NULL DEFAULT(GETDATE()),
Obs VARCHAR(MAX) NULL
)

Observe que as colunas Nome, Valor e Data possuem valores default. Para realizarmos um insert no próprio Sql Server, podemos fazer algo bem simples, como:

INSERT INTO TabelaTeste DEFAULT VALUES

Algora iremos realizar o mesmo insert, porém, com Linq to SQL.

Para tanto basta definir a propriedade “Auto Generated Value” como “True” nas colunas que possuem valores default, observe abaixo:

Imagem 1

E para o insert:

DB.TabelaTestes.InsertOnSubmit(new TabelaTeste());
DB.SubmitChanges();

Pronto, muito simples e rápido. (Acreditem se quiser, vi muitas dúvidas sobre isto! :P)

 

Abraços.

 

Crie consultas dinâmicas com Predicated Builder

Standard

C# 4.0 in a Nutshell

Vamos falar neste artigo sobre um recurso muito utilizado e que ajuda muito o trabalho para criação de cosultas dinâmicas com Linq chamado Predicated Builder.

Predicated Builder é uma biblioteca gratuita desenvolvida por Josefh Albahari e Ben Albahari (Experts em C# por sinal) que viabiliza a criação de queries dinâmicas para consultas com Linq. Sua utilização é muito simples e possui um código bem limpo e fácil. Continue reading

Linq com .Net Framework 2.0/3.0 ? Sim, é possível, use o LinqBridge

Standard

Para quem não sabe, o Linq foi inserido na biblioteca do .Net Framework a partir da versão 3.5, mas, seria muito interessante podermos utiliza-lo em aplicações que utilizam versões anteriores de Framework, como a 3.0 ou 2.0 não ?

Darei aqui uma dica rápida e muito interessante para viabilizar a situação proposta, demonstrarei o uso de uma biblioteca gratuita, desenvolvida justamente para realizar esta ponte, entre versões mais antigas do .Net Framework(2.0 e 3.0) com o Linq. Ela chama-se:

LinqBridge

O LinqBridge foi lançado a algum tempo (em 2007 mais precisamente), e foi desenvolvida por Joseph Albahari. Com o LinqBridge podemos utilizar todos os operadores padrão de Enumerables do .Net Framework 3.5, disponibilizando para tanto Linq to Objects. Continue reading

Linq to SQL – Conceitos Avançados ( Parte 6 ) – Adicionando validações

Standard

A Validação de Dados com Linq é na verdade uma verificação de que os valores inseridos nos objetos de dados estão em conformidade com a estrutura e esquema do objeto, além de prevenir e viabilizar a realização de validações especificas de sua aplicação no objeto.

Além de prevenir erros, a validação de dados reduz requisições no Banco de Dados uma vez que a validação é efetuada na aplicação antes de sua atualização de fato no Banco. Continue reading

Linq to SQL – Conceitos Avançados ( Parte 5 ) – Utilizando Compiled Query

Standard

Nesta quinta parte da série estarei falando sobre o uso de uma técnica muito produtiva e padronizada para a compilação de consultas chamado Compiled Query.

É muito comum em diversos sistemas a execução da mesma consulta diversas vezes por diversos usuários, porém, além de bastante improdutivo a repetição destas queries existe o fato da “perca” de desempenho em run-time. Isto devido ao fato que uma série de procedimentos e rotinas internas ocorrem para realizar a transformação destas queries para T-SQL, uma vez repetindo a mesma diversas vezes na aplicação, diversas vezes estes procedimentos internos irão ocorrer. Continue reading

Linq to SQL – Conceitos Avançados (Parte 4) – Escrevendo diretamente com SQL

Standard

Nesta quarta parte da série demonstrarei como podemos realizar consultas e chamadas com SQL diretamente utilizando Linq.

Visando que o Linq to SQL faz parte do pacote de tecnologias ADO.NET e seus serviços são prestados pelo modelo do provedor ADO.NET, isto torna possível juntar Linq to SQL com ADO.NET. Um exemplo claro, é possível criar uma nova instância de um DataContext utilizando uma conexão ADO.NET existente.

Em alguns casos pode ser que a consulta a ser realizada, ou a query a ser executada sejam muito específicas. Nestes casos é possível utilizar os métodos ExecuteCommand e ExecuteQuery para que comandos SQL sejam executados diretamente em seu banco de dados a partir de seu DataContext.

Continue reading

Linq to SQL – Conceitos Avançados (Parte 3) – Trabalhando com Stored Procedures complexas

Standard

 

Nesta terceira parte da série sobre Linq to SQL demonstrarei como trabalhar com Stored Procedures complexas.

Como esta é a última parte da série onde falarei sobre Stored Procedures, é muito interessante a leitura do artigo anterior onde falo sobre como trabalhar com procedures simples, veja aqui o artigo anterior.
Para este artigo vamos trabalhar com uma procedure bem mais complexa que a do artigo anterior, onde a mesma utilizará parâmetros de entrada, parâmetros de saída, tipos de retorno dinâmico e código de retorno.

Criando a Stored Procedure

Vamos criar a procedure ObtemGrupos, a mesma recebe um código de grupo de produtos, e retorna através do parâmetro de saída “@quantidadeProdutos” a quantidade de produtos que pertencem ao código do grupo solicitado. A mesma retorna ainda todas ou apenas algumas colunas da tabela de Grupos dependendo do
parâmetro “@todasColunas” e caso não exista um grupo com o código passado a mesma retorna 1, caso contrário retorna 0.

Vejamos como fica:

 

CREATE PROCEDURE ObtemGrupos
@codGrupo INT,
@todasColunas BIT,
@quantidadeProdutos INT OUTPUT
AS
SET NOCOUNT ON

  IF NOT EXISTS (SELECT 1 FROM tbProdutosGrupos WHERE codProdutoGrupo = @codGrupo)
  RETURN 1

  IF @todasColunas = 1
    SELECT * FROM tbProdutosGrupos
    WHERE codProdutoGrupo = @codGrupo
  ELSE
    SELECT nome, sigla FROM tbProdutosGrupos
    WHERE codProdutoGrupo = @codGrupo

  SELECT @quantidadeProdutos = COUNT(*) FROM tbProdutos WHERE codProdutoGrupo = @codGrupo

RETURN 0

 

Continue reading