none
Relacionar tabelas no Entity Framework RRS feed

  • Pergunta

  • Olá, tenho duas tabelas mapeadas em meu código através do EF 5. Desta forma tenho duas classes, Venda e Cliente.
    Na classe Venda quero que o atributo cliente receba um objeto do tipo Cliente. Sendo asism, como faço isso?
    Eu tentei setar o atributo como Cliente direto, mas ai ele gera um erro na classe de mapeamento com o banco de dados. Fala que o tipo que estou passando não corresponde ao tipo esperado pelo Database.
    quarta-feira, 9 de outubro de 2013 15:26

Todas as Respostas

  • Você está usando, Code First, Model First ou Database First? Posta o erro.

    quarta-feira, 9 de outubro de 2013 15:34
  • Code First.
    Classe Venda
    Classe Produto
    VendaMap

    Erro

    Obrigado desde já!



    quarta-feira, 9 de outubro de 2013 15:43
  • Boa tarde,

    se for usando code first você pode fazer o seguinte

    Exemplo, 1 blog tem vários posts:

    public class Blog { public int BlogId { get; set; } public string Name { get; set; }

    public virtual List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; }

    public int BlogId { get; set; } public virtual Blog Blog { get; set; } }

    Contexto:

     public class BloggingContext : DbContext
        {
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
        }
    
    Se não der certo de primeira, consulte a referencia para conferir se tudo foi feito corretamente

    Referencias

    quarta-feira, 9 de outubro de 2013 16:09
  • Da uma olhada também neste link aqui http://msdn.microsoft.com/pt-BR/data/jj200620

    Ele mostra o Code First usando um banco existente, e é isso que você ta fazendo pelo que reparei nas suas classes.

    quarta-feira, 9 de outubro de 2013 16:12
  • Public Class Produto
        Public Property Id as Integer
        Public Property IdVenda as Integer
        Public Property Descricao as String
        Public Overridable Property Venda as Venda
    End Class

    Public Class Venda
        Public Property Id As Integer
        Public Property IdCliente as Integer
        Public Property Total As Decimal?
        Public Overridable  Property Produtos As ICollection<Produto>
        Public Overridable Property Cliente as Cliente
    End Class

    Public Class Cliente
        Public Property Id as Integer
        Public Property Nome as String
        Public Property Descricao as String
        Public Overridable Property Vendas as ICollection<Vendas>
    End Class

    Vou colocar o Map em C#, não manjo Vb.Net

    No Map da venda

      this.HasMany<Produto>(venda => venda.Produtos).WithRequired(produto => produto.Venda).HasForeignKey(produto => produto.IdVenda).WillCascadeOnDelete(true);

    No Map do Cliente

      this.HasMany<Venda>(cliente=> cliente.Vendas).WithRequired(venda=> venda.Cliente).HasForeignKey(venda=> venda.IdCliente).WillCascadeOnDelete(true);

    Obs: Não mapear as propriedades de navegação caso não seja relacionamento conforme acima.


    quarta-feira, 9 de outubro de 2013 17:14