Usuário com melhor resposta
Relacionamento no EF 6 (Code First)

Pergunta
-
Bom dia, estou com o seguinte problema.
Estou usando EF 6 com Code First e tenho duas classes: Cliente e Versao.
Cada cliente está relacionado a uma versão (logo cada versão pode estar relacionada a nenhum cliente ou a vários).
Eu preciso saber como eu faço essa relação.
Tentei fazer da forma abaixo:
[Table("CLIENTES")] public class Cliente { public Cliente() { } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public TipoPessoa TipoPessoa { get; set; } public string NomeRazao { get; set; } public string NomeFantasia { get; set; } public long CpfCnpj { get; set; } public string RG_InscEstadual { get; set; } public string InscMunicipal { get; set; } public DateTime? DataNascimento_Fundacao { get; set; } public bool Ativo { get; set; } public int Fone1 { get; set; } public int Fone2 { get; set; } public int Fone3 { get; set; } public int Email1 { get; set; } public int Email2 { get; set; } public int Email3 { get; set; } public string Site { get; set; } public DateTime? DataCadastro { get; set; } public string UsuarioCadastro { get; set; } public DateTime? ClienteDesde { get; set; } public DateTime? DTHR_UltimaAtualizacao { get; set; } [InverseProperty("Id")] public virtual Versao VersaoAtual { get; set; } } [Table("VERSOES")] public class Versao { public Versao() { ClientesComEssaVersao = new List<Cliente>(); } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string NumVersao { get; set; } public DateTime? DataLancamento { get; set; } public DateTime? DataLiberacao { get; set; } public string Observacao { get; set; } public DateTime? DataCadastro { get; set; } public string UsuarioCadastro { get; set; } public ICollection<Cliente> ClientesComEssaVersao { get; set; } }
Dessa forma o banco de dados é criado corretamente (pelo menos no meu ponto de vista), mas eu não consigo salvar as relações. Além disso eu tentei inserir manualmente na coluna VersaoAtual_Id (da tabela cliente) um valor existente na tabela VERSOES e quando eu instanciei o meu cliente ele não trouxe a instância da classe Versao.
Alguém sabe como me ajudar?
Jéferson Tavares
Respostas
-
Context.Clientes.Include(c.VersaoAtual).FirstOrDefault(c=> c.Id == 1)
- Marcado como Resposta Jéferson Tavares quinta-feira, 15 de maio de 2014 11:10
Todas as Respostas
-
Na classe cliente remova [InverseProperty("Id")] e coloque [System.ComponentModel.DataAnnotations.Schema.ForeignKey("IdVersao")]
Na classe crie uma propriedade "public int IdVersao{get;set;}" se for obrigatório cada cliente ter uma versão, caso não, "public int? IdVersao{get;set;}"
-
Fiz isso:
public int? VersaoAtualId { get; set; } [ForeignKey("VersaoAtualId")] public virtual Versao VersaoAtual { get; set; }
Assim eu consigo salvar o Id da versão no cliente usando a propriedade VersaoAtualId. Mas na hora que eu dou um Context.Clientes.Find() ele não deveria trazer a propriedade VersaoAtual instanciada?
Jéferson Tavares
-
-
-
Context.Clientes.Include(c.VersaoAtual).FirstOrDefault(c=> c.Id == 1)
- Marcado como Resposta Jéferson Tavares quinta-feira, 15 de maio de 2014 11:10