Entity Framework

<< Click to Display Table of Contents >>

Navigation:  Banco de dados >

Entity Framework

Previous pageReturn to chapter overviewNext page

Definição

 

Poder fazer CRUD com qualquer tabela de qualquer banco de dados sem 1 linha de SQL

 

Como fazer - um exemplo

 

Primeiro monte uma base (usei SQlite3) com a seguinte estrutura

 

CREATE TABLE [tipo] (

  [cd_tipo] INTEGER PRIMARY KEY AUTOINCREMENT, 

  [nm_tipo] VARCHAR(30) NOT NULL);

 

CREATE TABLE caixa (

  cd_caixa INTEGER PRIMARY KEY AUTOINCREMENT, 

  descricao VARCHAR(30) NOT NULL,

  data DATE NOT NULL DEFAULT (current_date), 

  valor DECIMAL(10, 2) NOT NULL, 

  cd_tipo INTEGER NOT NULL CONSTRAINT [cd_tipo_fk] REFERENCES [tipo]([cd_tipo]));

 

Note que existe um FK entre as tabelas

 

No Visual Studio

 

Crie uma Entity (necessário VS2008 sp1 ou +) baseando-se no banco criado, dê o nome de MinhaEntidade

 

CRUD

 

Inserindo um tipo

 

  // inicializa a entidade

  MinhaEntidade entidade = new MinhaEntidade();

 

  // cria um tipo

  var novo = new tipo() { nm_tipo = "Conta de luz" };

 

  // adiciona na entidade

  entidade.AddTotipo(novo);

 

  // "commit"

  entidade.SaveChanges();

 


Inserindo um item do caixa com um novo tipo (FK)

 

  // criar novo registro (com FK)

  MinhaEntidade entidade = new MinhaEntidade();

 

  // cria um tipo

  var novoTipo = new tipo() { nm_tipo = "Padaria" };

  entidade.AddTotipo(novoTipo);

 

  // cria um item caixa usando o tipo criado acima!

  var cx = new caixa();

  cx.data = DateTime.Now;

  cx.descricao = "Bolo e leite";

  cx.valor = 10.5;

  cx.tipo = novoTipo;

 

  // grava ambos itens

  entidade.AddTocaixa(cx);

  entidade.SaveChanges();

 


Buscando todos os tipos e exibindo um DataGridView

 

  MinhaEntidade entidade = new MinhaEntidade();

  dataGridView1.DataSource = entidade.tipo;

  dataGridView1.Refresh();

 


Buscando todos os itens de caixa e o nome do tipo associado (note o join)

 

  MinhaEntidade entidade = new MinhaEntidade();

 

  var dados = from t in entidade.caixa

              where t.cd_caixa > 10

              select new { t.data, t.descricao, t.valor, t.tipo.nm_tipo };

 

  dataGridView1.DataSource = dados;

  dataGridView1.Refresh();

 


Alterando um tipo

 

  MinhaEntidade entidade = new MinhaEntidade();

  tipo tp = new tipo();

  tp = (from c in entidade.tipo where c.cd_tipo == 3 select c).First();

  tp.nm_tipo = "Manutenção do carro";

  entidade.ApplyPropertyChanges("tipo", tp);

  entidade.SaveChanges();

 


Excluindo um tipo

 

  MinhaEntidade entidade = new MinhaEntidade();

  entidade.DeleteObject((from c in entidade.tipo where c.cd_tipo == 1 select c).First());

  entidade.SaveChanges();

 


Percorrendo os tipos com foreach

 

  MinhaEntidade entidade = new MinhaEntidade();

  foreach (tipo tp in entidade.tipo)

  {

    Console.WriteLine(tp.cd_tipo.ToString() + "  -  " + tp.nm_tipo);

  }

 


Montando a string de conexão em runtime

 

Digamos que seu App.Config seja assim:

 

<connectionStrings>

    <add name="ClientesEntity" 

         connectionString="metadata=res://*/ClientesModel.csdl|res://*/ClientesModel.ssdl|res://*/ClientesModel.msl;

                           provider=MySql.Data.MySqlClient;

                           provider connection string=&quot;server=server02;User Id=root;password=qwe123;Persist Security Info=True;database=temp1&quot;" 

         providerName="System.Data.EntityClient" />

  </connectionStrings>

 

Você deve programar assim:

 

  using System.Data.EntityClient;

 

  // oriente-se pelas cores

  EntityConnectionStringBuilder connStrBuild = new EntityConnectionStringBuilder();

  connStrBuild.Metadata = @"res://*/ClientesModel.csdl|res://*/ClientesModel.ssdl|res://*/ClientesModel.msl";

  connStrBuild.Provider = "MySql.Data.MySqlClient";

  connStrBuild.ProviderConnectionString = "server=server02;User Id=root;password=qwe123;Persist Security Info=True;database=temp1;";

  

  // aqui monta a entidade

  ClientesEntity cliente = new ClientesEntity(connStrBuild.ToString());