Inquiridor
Relacionar tabelas no Entity Framework

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.
Todas as Respostas
-
Você está usando, Code First, Model First ou Database First? Posta o erro.
- Editado Cesar Mendes da Silva quarta-feira, 9 de outubro de 2013 15:36 alteração
-
-
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
-
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.
-
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 ClassVou 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.