ENTITY FRAMEWORK

JABA 19/08/2012 00:47:18
#408148
Olá pessoal, boa noite!

Criei um projeto com o entity framework 4.1 CodeFirst para dar umas futucadas e ele está gerando as seguintes tabelas:

Clientes (id, Nome, Id_Vendedor)
Vendedores(id, Nome)
Pedidos (Id, Id_Cliente, Id_Vendedor)

Na minha classe Vendedor, eu tenho o seguinte:

Public Class Vendedor

property Clientes As ICollection(of Cliente)

End Class

Como vocês podem perceber, o entity na hora de gerar as tabelas e os campos, está colocando uma chave estrangeira na tabela Clientes (Id_Vendedor) para popular a propriedade Clientes que está na classe Vendedor, só que a minha intenção é eliminar essa chave estrangeira e popular a propriedade Clientes da classe Vendedor pela tabela de Pedido.

Como trazer os clientes da tabela Pedido para popular a propriedade Clientes da classe Vendedor?

vlw
KERPLUNK 20/08/2012 13:35:47
#408214
O EF vai gerar as classes exatamente como a estrutura do seu banco de dados.
JABA 20/08/2012 18:44:46
#408238
Fala ai Kerplunk, tudo bom?

Quem esta gerando a base de dados é o entity. Ele está criando o Id do Vendedor na tabela cliente, e eu estou tentando retirar essa chave estrangeira de lá.

Para resolver isso, eu tenho que mapear a propriede Clientes da classe Vendedor para a Tabela pedidos, se baseando pelo Id_Cliente e Id_Vendedor.

No Nhibernate, eu tenho algo mais ou menos assim:

public class Vendedor : Funcionario
{
[hasMany(GetType(Cliente), Table:= [Ô]Pedidos[Ô], ColumnKey:= [Ô]Id_Cliente, ColumnRef:=[Ô]Id_Vendedor[Ô]]
public virtual IList<Cliente> Clientes { get; set; }
}

é exatamente isso que eu quero fazer, só que com o Entity.

Eu tentei isso aqui:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Vendedor>().HasMany(v => v.Clientes).WithMany().Map(m => m.ToTable([Ô]Pedidos[Ô]).MapLeftKey([Ô]Vendedor_Id[Ô]).MapRightKey([Ô]Cliente_Id[Ô]));

}

Porém, ele está criando duas Tabelas: Pedidos e Pedidos1

Tem alguma ideia de como resolver isso?

vlw
JABA 20/08/2012 18:47:10
#408239
O codigo do projeto está assim:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
public class Pedido
{
public Pedido()
{
Itens = new List<ItemPedido>();
}
public int Id { get; set; }
public Vendedor Vendedor { get; set; }
public Cliente Cliente { get; set; }
public virtual ICollection<ItemPedido> Itens { get; set; }
}
}
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]ItensPedido[Ô])]
public class ItemPedido
{
public int Id { get; set; }
public Produto Produto { get; set; }
public int Quantidade { get; set; }
public Pedido Pedido { get; set; }
}
}
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]Produtos[Ô])]
public class Produto
{
public int Id { get; set; }
public string Descricao { get; set; }
public string CodigoDeBarras { get; set; }
public int Quantidade { get; set; }
}
}
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]Pessoas[Ô])]
public class Pessoa
{
public int Id { get; set; }
public string Nome { get; set; }
}
}
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]PessoasFisicas[Ô])]
public class PessoaFisica: Pessoa
{
public string CPF { get; set; }
}
}
===============================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]Clientes[Ô])]
public class Cliente : PessoaFisica
{
public decimal Saldo { get; set; }
public virtual ICollection<Pedido> Pedidos { get; set; }
}
}
===============================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]Funcionarios[Ô])]
public class Funcionario : PessoaFisica
{
public decimal Salario { get; set; }
}
}
===============================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace CarrinhoDeCompras.Models
{
[Table([Ô]Vendedores[Ô])]
public class Vendedor : Funcionario
{
public int Comissao { get; set; }
public virtual ICollection<Cliente> Clientes { get; set; }
}
}
===============================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace CarrinhoDeCompras.Models
{
public class Contexto : DbContext
{
//public Contexto() : base([Ô]CarrinhoDeCompras[Ô]) { }

public DbSet<Pessoa> Pessoas { get; set; }
public DbSet<PessoaFisica> PessoasFisicas { get; set; }
public DbSet<Cliente> Clientes { get; set; }
public DbSet<Funcionario> Funcionarios { get; set; }
public DbSet<Vendedor> Vendedores { get; set; }
public DbSet<Produto> Produtos { get; set; }
public DbSet<Pedido> Pedidos { get; set; }
public DbSet<ItemPedido> ItensPedido { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}
Tópico encerrado , respostas não são mais permitidas