01
Entity Framework 4.0: Utilizando many-to-many com POCOs
Filed Under (.NET 4.0, Entity Framework) by Vinicius Quaiato on 01-03-2010
Tagged Under : Entity Framework, Many-To-Many, ORM, POCO, VS2010
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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.










