Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Entity Framework 4.0: Utilizando many-to-many com POCOs


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:Modelo de Classes Entity Framework 4.0

Feito isso vamos criar uma associação entre nossas entidades, como pode ser visto abaixo:Criando associação no modelo do EF 4.0

Definindo a Associacao Many-To_Many no EF 4.0

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;
    }
    }
}
</loja></loja></loja>

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;
    }
    }
}
}
</produto></produto></produto>

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;
    }
    }
}
</loja></loja></loja></produto></produto></produto>

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:Resultado da relação Many-to-Many

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.

Voltar

Fork me on GitHub