none
Relacionamento entre Classes ASP.Net MVC 4 C# RRS feed

  • Pergunta

  • Boa tarde pessoal!

    Eu tenho uma classe Membro na qual ficam armazenados os dados principais e tenho outras classes que pegam detalhes de sua afiliação (como colação de graus que podem ser várias ou ainda familiares) e ainda outras que pegam apenas um detalhe (como a classe cargo que pode definir apenas um cargo atual ou nulo)...

    Minha dúvida é em relação a como fazer esse relacionamento nas classes de forma que depois eu possa recuperar os dados (das classes detalhe) ou inserir dados (como no caso de familiares... que eu posso inserir ou consultar os que estão atrelados ao membro)...

    Como está a minha classe Membro:

    public class Membro
        {
          
            [Key]
            public int UserId { get; set; }
    
            [Required]
            public string Nome { get; set; }
            public string Sobrenome { get; set; }
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
            public DateTime Nascimento { get; set; }
    
            [Required]
            [Display(Name = "Cadastro de Identidade Maçônica")]
            public string CIM { get; set; }
    
    
            // O Email será utilizado como Username
            [Required]
            [Display(Name = "Email de usuário")]
            public string Email { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            public string PalavraPasse { get; set; }
    
    
            public string Profissao { get; set; }
    
    
            // Status: Ativo, Inativo, Suspenso, OE
            [Required]
            [Display(Name = "O Status do Membro é Obrigatório")]
            public string Status { get; set; }
    
            //Tipo Graduação: 
            public ICollection<Graduacao> Graduacaoes { get; set; }
    
            //Coleção de Familiares do Membro
            public ICollection<Familiar> Familiares { get; set; }
    
            //Fotos do Membro a serem utilizadas no site como identidade
            public ICollection<MembroFoto> MembroFotoes { get; set; }
    
            //Contatos do membro
            public ICollection<MembroContato> MembroContatoes { get; set; }
    
            //Cargo Administrativo da Loja se houver
            public ICollection<MembroCargo> MembroCargoes { get; set; }
    
    
    
        }
    }

    Como está minha classe Familiar (um membro pode ter vários familiares):

     class Familiar
        {
            public int FamiliarId { get; set; }
            public string Nome { get; set; }
            public string Sobrenome { get; set; }
            public string Parentesco { get; set; }
            public DateTime Aniversario { get; set; }
            public string EstadoCivil { get; set; }
            public string Email { get; set; }
            public string Telefone { get; set; }
            public string Celular { get; set; }
            public string Cidade { get; set; }
            public string UF { get; set; }
    
        }

    Como está minha classe Graduacao (um membro pode ter várias graduações):

     public class Graduacao
        {
            [Key]
            public int GraduacaoId { get; set; }
    
          
            [Required]
            public Grau Grau {get; set;}
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]        
            public DateTime DataGraduacao { get; set; }
        }

    Como está minha classe Grau (uma Graduacao pode ter apenas 01 Grau selecionado):

     class Grau
        {
            public int GrauId { get; set; }
            public string NomeGrau { get; set; }
    
        }

    Como vocês podem notar Membro terá uma coleção de familiares e graduações (existem outras classes ainda mas seguem um ou outro padrão das que coloquei aqui), mas em algum momento (como em cargo) ele terá apenas que fazer uma escolha (como uma seleção) de que valor utilizar.

    Como sou iniciante em C# não sei como fazer esta estrutura e agradeço a ajuda!

    Abraços

    sábado, 23 de março de 2013 18:14

Respostas

  • Pelo que deu pra entender, a relação é N para 1

    N Membro 1 Familiar

    N Membro 1 Graduação e etc.

    Para vc acessar informações de outra classe através da classe Membro, vc vai precisar de usar chaves estrangeiras, algo que vc não fez.

    Para a relação de Membro com Graduação, por exemplo, ficaria assim:

    public class Membro
        {
          
            [Key]
            public int UserId { get; set; }
    
            [Required]
            public string Nome { get; set; }
            public string Sobrenome { get; set; }
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
            public DateTime Nascimento { get; set; }
    
            [Required]
            [Display(Name = "Cadastro de Identidade Maçônica")]
            public string CIM { get; set; }
    
    
            // O Email será utilizado como Username
            [Required]
            [Display(Name = "Email de usuário")]
            public string Email { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            public string PalavraPasse { get; set; }
    
    
            public string Profissao { get; set; }
    
    
            // Status: Ativo, Inativo, Suspenso, OE
            [Required]
            [Display(Name = "O Status do Membro é Obrigatório")]
            public string Status { get; set; }
    
            //Tipo Graduação: 
            public ICollection<Graduacao> Graduacaoes { get; set; }
    
            //Coleção de Familiares do Membro
            public ICollection<Familiar> Familiares { get; set; }
    
            //Fotos do Membro a serem utilizadas no site como identidade
            public ICollection<MembroFoto> MembroFotoes { get; set; }
    
            //Contatos do membro
            public ICollection<MembroContato> MembroContatoes { get; set; }
    
            //Cargo Administrativo da Loja se houver
            public ICollection<MembroCargo> MembroCargoes { get; set; }
    
    public int IDGraduação {get;set;}
    //Chave Estrangeira
    public virtual Graduacao Graduacao {get;set;}
    
    
    
        }
    }

    public class Graduacao
        {
            [Key]
            public int GraduacaoId { get; set; }
    
          
            [Required]
            public Grau Grau {get; set;}
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]        
            public DateTime DataGraduacao { get; set; }
    
    public virtual ICollection<Membro> Membros {get;set;}
        }

    No caso das seleções, vc pode usar uma Dropdownlist na sua view e puxar os dados da classe que vc quer fazendo um GET.

    sábado, 23 de março de 2013 23:21

Todas as Respostas

  • Pelo que deu pra entender, a relação é N para 1

    N Membro 1 Familiar

    N Membro 1 Graduação e etc.

    Para vc acessar informações de outra classe através da classe Membro, vc vai precisar de usar chaves estrangeiras, algo que vc não fez.

    Para a relação de Membro com Graduação, por exemplo, ficaria assim:

    public class Membro
        {
          
            [Key]
            public int UserId { get; set; }
    
            [Required]
            public string Nome { get; set; }
            public string Sobrenome { get; set; }
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
            public DateTime Nascimento { get; set; }
    
            [Required]
            [Display(Name = "Cadastro de Identidade Maçônica")]
            public string CIM { get; set; }
    
    
            // O Email será utilizado como Username
            [Required]
            [Display(Name = "Email de usuário")]
            public string Email { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            public string PalavraPasse { get; set; }
    
    
            public string Profissao { get; set; }
    
    
            // Status: Ativo, Inativo, Suspenso, OE
            [Required]
            [Display(Name = "O Status do Membro é Obrigatório")]
            public string Status { get; set; }
    
            //Tipo Graduação: 
            public ICollection<Graduacao> Graduacaoes { get; set; }
    
            //Coleção de Familiares do Membro
            public ICollection<Familiar> Familiares { get; set; }
    
            //Fotos do Membro a serem utilizadas no site como identidade
            public ICollection<MembroFoto> MembroFotoes { get; set; }
    
            //Contatos do membro
            public ICollection<MembroContato> MembroContatoes { get; set; }
    
            //Cargo Administrativo da Loja se houver
            public ICollection<MembroCargo> MembroCargoes { get; set; }
    
    public int IDGraduação {get;set;}
    //Chave Estrangeira
    public virtual Graduacao Graduacao {get;set;}
    
    
    
        }
    }

    public class Graduacao
        {
            [Key]
            public int GraduacaoId { get; set; }
    
          
            [Required]
            public Grau Grau {get; set;}
    
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]        
            public DateTime DataGraduacao { get; set; }
    
    public virtual ICollection<Membro> Membros {get;set;}
        }

    No caso das seleções, vc pode usar uma Dropdownlist na sua view e puxar os dados da classe que vc quer fazendo um GET.

    sábado, 23 de março de 2013 23:21
  • Boa noite Omnislash009!

    Primeiramente obrigado por responder!

    Então em classes tipo N (que irão guardar a coleção) eu tenho que inserir a chave estrangeira e a virtual da Classe 1 (que será a principal) como abaixo?

     
    public class ClasseN
    //Classe que terá muitos registros
    
    {
     public int ClasseNId {get; set;}
     public string Nome {get; set;}
     public string OutraCoisa {get; set;}
    
    public int classe1Id {get; set;}
    
    public virtual Classe1 Classe1 {get; set;}
    }
    
    
    
    public class Classe1
    //Classe única mas que terá uma coleção de registros atrelados a ela
    
    {
     public int Classe1Id {get; set;}
     public string Nome {get; set;}
     public string Others {get; set;}
    
       public virtual ICollection<ClasseN> ClasseNes {get; set;}
    
    }

    domingo, 24 de março de 2013 23:55
  • Exatamente
    segunda-feira, 25 de março de 2013 12:24