{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
01/03/2010
Fala galera, recebi algumas dúvidas por e-mail e vamos resolver aqui.Vamos trabalhar com relações many-to-many utilizando POCO e o Entity Framework 4.0.Para ver como trabalhar com POCO no EF4 veja este post aqui.Vamos fazer um exemplo bem simples, trabalhando com produtos e lojas. Cada produto poderá estar em muitas lojas, e uma loja poderá conter muitos produtos.Abaixo temos o desenho de nosso modelo inicial:
Feito isso vamos criar uma associação entre nossas entidades, como pode ser visto abaixo:
Feito isso basta salvarmos nosso modelo e gerar o banco de dados. Lembrando de desmarcar a opção de geração de código no modelo (veja aqui como fazer isso).Nossas classes ficarão simples, como não poderia deixar de ser.Abaixo vemos a classe Produto, que como pode-se notar não possui nenhuma dependência do entity Framework e nem conhece nada relacionado com banco de dados:
public class Produto
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
public virtual decimal ValorSugerido { get; set; }
private IList<Loja> lojasOndeVende = new List<Loja>();
public virtual IList<Loja> LojasOndeVende
{
get { return this.lojasOndeVende; }
set { this.lojasOndeVende = value; }
}
}Abaixo temos a classe Loja:
public class Loja
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
public virtual string Cidade { get; set; }
private IList<Produto> produtosQueVende = new List<Produto>();
public virtual IList<Produto> ProdutosQueVende
{
get { return this.produtosQueVende; }
set { this.produtosQueVende = value; }
}
}E aqui temos nossa classe de contexto do Entity Framework, que também criamos, de forma bastante simples:
public class EF4Context : ObjectContext
{
public EF4Context()
: base("name=ModeloManyToManyContainer", "ModeloManyToManyContainer") { }
private IObjectSet<Produto> produtos;
public IObjectSet<Produto> Produtos
{
get
{
if(produtos == null)
produtos = CreateObjectSet<Produto>();
return produtos;
}
}
private IObjectSet<Loja> lojas;
public IObjectSet<Loja> Lojas
{
get
{
if(lojas == null)
lojas = CreateObjectSet<Loja>();
return lojas;
}
}
}E isto é tudo que precisamos. Já podemos trabalhar com nossas entidades de forma a terem a relação Many-to-Many feita e funcionando.Criei uma aplicação console para demonstrar isso. O método abaixo faz algumas inserções no banco, e o resultado da consulta pode ser visto na imagem a seguir:
private
static void InserirNovosProdutosELojas(){
var contexto = new EF4Context();
var produto = new Produto();
produto.Nome = "Produto de Soja";
produto.ValorSugerido = 10;
var produto2 = new Produto();
produto2.Nome = "Produto de tofu";
produto2.ValorSugerido = 10;
var loja = new Loja();
loja.Nome = "Loja do Vinicius";
loja.Cidade = "São Paulo";
loja.ProdutosQueVende.Add(produto);
var loja2 = new Loja();
loja2.Nome = "Loja Vegetariana";
loja2.Cidade = "São Paulo";
loja2.ProdutosQueVende.Add(produto);
loja2.ProdutosQueVende.Add(produto2);
contexto.AddObject("Produtos", produto);
contexto.AddObject("Produtos", produto2);
contexto.AddObject("Lojas", loja);
contexto.AddObject("Lojas", loja2);
contexto.SaveChanges();
Console.ReadKey();
}Reparem que apenas adicionamos os produtos nas lojas, e não precisamos adicionar as lojas aos produtos também. O Entity Framework é esperto para fazer essa associação.Aqui podemos ver uma saída gráfica das nossas relações:
Bom pessoal, éisso aê. A relação Many-to-Many com POCOs no Entity Framework 4.0 é bastante simples e natural. Não requer passos adicionais e nem complicados.Qualquer dúvida, crítica ou sugestão, deixem seus comentários ou podem escrever email.
Att, Vinicius Quaiato.