Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
caiiovox

[RESOLVIDO] Migrations .NET

Pergunta

Olá galera do iMasters, meu primeiro post aqui, e começo com uma dúvida minha (:

Seguinte, tenho umas dúvida com relação ao .net, porém devo levantar alguns pontos aqui.

Estou estudando asp.net mvc pelo material do Eduardo Pires, muito bom por sinal, vi as vídeo aulas e fiz minhas anotações e agora estou fazendo outro exemplo diferente das video aulas para aprender por conta própria.

 

Não sei se minha lógica está certa, pois é meu primeiro projeto caminhando sozinho apenas com minhas anotações que fiz.
Quero criar uma agendinha simples, onde eu possuo um contato, esse contato ele pode ter N aparelhos, e esse aparelho pode ter N chips(Sim) e esses chips podem ter N números. Como podem ver nas fotos.

Nas vídeo aulas ele faz um exemplo de Clientes e Endereços, essas são as entidades que ele relacionou, porém agora eu quero relacionar 3 entidades como podem ver, independente da minha lógica estar meio errada, eu quero aprender como vai funcionar as relações com 3 entidades aplicadas no exemplo que ele ensinou.

- Problema 1: Um amigo me mostrou a propriedade enum, porém não estou conseguindo trabalhar com ela, eu precisava associar os números ao chip que eu quiser.

- Problema 2: Eu tenho uma classe AgendaMvcContext que está na minha camada de Domínio, e eu preciso usar os Migrations, porém quando vou no package manager console digitar enable-migrations ela retorna essa mensagem, que deu a entender que a minha classe de Numero não tem uma PK. Porém eu usei a propriedade Guid para identificar que o TelNumeros é uma PK.

- Problema 3: o Enable-Migrations deve ser usado no PCM com o projeto Infra.Data selecionado em sua caixa correto ? Pois o Migrations trabalha com o banco de dados correto ?

Será que o problema 2 está ligado ao problema um por conta de não conseguir trabalhar com o enum ? Aos C# neteiros, poderiam me ajudar ? Obrigado desde já.

Segue a mensagem do PCM caso não consiga visualizar:
One or more validation errors were detected during model generation:

CL.AgendaMvc.Infra.Data.Context.Numero: : EntityType 'Numero' has no key defined. Define the key for this EntityType.
TipoSim: EntityType: EntitySet 'TipoSim' is based on type 'Numero' that has no keys defined.

IMASTER1.jpg

imaster2.jpg

imaster3.jpg

imaster4.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

12 respostas a esta questão

Recommended Posts

Na entidade 'Numero', crie uma propriedade chamanda 'NumeroId', essa pode ser do tipo Guid, e 'TelNumero' pode ser string, se for salvar com máscara, também precisa do 'AparelhoId'.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, itlpps disse:

Na entidade 'Numero', crie uma propriedade chamanda 'NumeroId', essa pode ser do tipo Guid, e 'TelNumero' pode ser string, se for salvar com máscara, também precisa do 'AparelhoId'.

Valeu cara ! E sobre o Migrations ? Eu utilizo ele na camada de Data mesmo correto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, caiiovox disse:

Valeu cara ! E sobre o Migrations ? Eu utilizo ele na camada de Data mesmo correto ?

Usa na camada que faz acesso ao banco, junto com a classe de contexto, no seu caso, junto com AgendaMvcContext.

 

Geralmente usa projetos diferentes para cada camada... Não sei como está sua arquitetura. rs

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, itlpps disse:

Usa na camada que faz acesso ao banco, junto com a classe de contexto, no seu caso, junto com AgendaMvcContext.

 

Geralmente usa projetos diferentes para cada camada... Não sei como está sua arquitetura. rs

Sim, cada projeto está em uma camada diferente.

E mesmo assim está dando aquele erro, porém se eu digitar apenas enable-migration o console diz que já está habilitado, e se eu digitar enable-migration -force ele alega que minha entidade Numero não tem uma chave primária.

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, caiiovox disse:

Sim, cada projeto está em uma camada diferente.

E mesmo assim está dando aquele erro, porém se eu digitar apenas enable-migration o console diz que já está habilitado, e se eu digitar enable-migration -force ele alega que minha entidade Numero não tem uma chave primária.

Então, como disse antes, crie uma 'NumeroId' na entidade Numero, assim o migration entende que isso é uma primary key.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não bro kk

Numero id = NumeroId

public Guid NumeroId { get; set; }

E o id do aparelho também

public Guid AparelhoId { get; set; }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso. 

Tem que ter AparelhoId nos dois, pro migration fazer o mapeamento e criar chave estrangeira na entidade Numero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh, então ele vai mapear a entidade de Número, ver que a PK é o NumeroId, assim como nas outras entidades, na entidade por exemplo Aparelho é o AparelhoId e na de Contato é ContatoId

Feito isso ele precisa ver quais são as chaves estrangeiras, então ele vai verificar quais são que no caso é AparelhoId que pertence a aparelho,e na entidade de aparelho ele tem um Contato Id.

E o que seria o

public virtual Aparelho Aparelho { get; set; }

Da entidade de Numero ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso.

 

O migration funciona por convenção de nomenclatura.

Exemplo: Você tem uma classe chamada Numero, essa classe vai ser mapeada e precisa de uma pk, essa classe precisa de uma propriedade chamada Id ou NumeroId.

 

Propriedade virtual é pra você poder 'caminhar' entre as entidades e fazer 'join'.

 

Ai você pode acessar os aparelhos com esse número, no caso.

E também os números pelo aparelho.

Um mapeamento de ida e volta... 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou seja, o Id no final não é questão de estética, mas sim pela forma que o Migrations usa para trabalhar !

 

Não sei se a maneira que estou usando esse public virtual está correta, mas irei treinando assim, quando acabar esse meu projeto de agenda quero bolar algo com umas 5 entidades de relacionamento ! Valeu cara ! Obrigado !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • Por Rafael Massula
      Boa noite pessoal, 
      Tenho o seguinte código em .Net que faz a comparação de uma senha que foi criptografada e salva no banco com a senha comum que o usuário conhece. O algoritmo que desenvolvi foi esse da image.png porem preciso converter essa verificação para JavaScript pela seguinte necessidade, será uma aplicação em electron e ela poderá funcionar offline então não terei como mandar a verificação para o servidor. Existe alguma possibilidade? Desde já agradeço. 

    • Por TheLord23
      ESTOU COMEÇANDO AGORA NA PROGRAMAÇÃO COM VISUALG E TERIA QUE COLOCAR ESTE CODIGO EM UM LAÇO DE REPETIÇÃO.
      POREM NÃO ESTOU CONSEGUINDO PODERIAM ME AJUDAR ?
       
      SÓ PENSANDO QUE O USUÁRIO IRA DIGITAR O TAMANHO DO VETOR, APOS ISSO CADA OPÇÃO QUE ELE ESCOLHER E ELA SER EXECUTADA DE FORMA CORRETA ELE VOLTARA PARA O MEUNU PRINCIPAL DAS OPÇÕES ATE QUE ELE SELECIONE A OPÇÃO "F"
       
      POREM TENTEI ESCREVELO USANDO ENQUANTO MAS ACABOU QUE EU NÃO CONSIGO PREVINIR OS ERROS DO USUÁRIO QUANDO ELE COLOCA AS INFORMAÇÕES
       
      TIPO:
      -ARMAZENAR UM NÚMERO NO VETOR E ESSE NÚMERO NÃO SER SOBRESCREVIDO ATE QUE O PROGRAMA SEJA ENCERRADO
      -SE ELE DIGITAR PRA BUSCAR OU INSERIR O NÚMERO ZERO O PROGRAMA INFORMAR QUE O VALOR É INVÁLIDO
       
      TENTEI USAR PROCEDIMENTOS E FUNÇÕES MAS OS ERROS CONTINUARAM.
       
       
       
      Algoritmo "DESAFIO"
      Var
         AUX,CONTADOR,BUSCAR:INTEIRO
         POSICAO,AUX_TEMP:INTEIRO
         OPCAO:CARACTERE
         RESULT_BUSCA: LOGICO
         SOMA_VET:REAL
         NUMERO:VETOR[1..500]DE INTEIRO
      Inicio
         ESCREVAL("*********************************")
         ESCREVAL("* CADASTRO DE VETORES - DESAFIO *")
         ESCREVAL("*********************************")
         ESCREVA("DIGITE O TAMANHO DO VETOR A SER CADASTRADO: ")
         LEIA(AUX)
         NUMERO[AUX] <- AUX
         ESCREVAL("A - Cadastrar um novo número;")
         ESCREVAL("B - Buscar um número")
         ESCREVAL("C - Excluir um número;")
         ESCREVAL("D - Listar os números cadastrados;")
         ESCREVAL("E - Exibir a soma dos números do vetor;")
         ESCREVAL("F - Sair do sistema.")
         LEIA(OPCAO)
         OPCAO <- MAIUSC(OPCAO)
         ESCOLHA OPCAO
         CASO "A"
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               ESCREVA("DIGITE O VALOR QUE SERÁ ARMAZENADO NA",CONTADOR,"ª POSIÇÃO DO VETOR: ")
               LEIA(NUMERO[CONTADOR])
            FIMPARA
         CASO "B"
            ESCREVA("QUAL NÚMERO DESEJA ENCONTRAR: ")
            LEIA(BUSCAR)
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               SE NUMERO[CONTADOR] = BUSCAR ENTAO
                  RESULT_BUSCA <- VERDADEIRO
                  POSICAO <- CONTADOR
               FIMSE
            FIMPARA
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               ESCREVAL(NUMERO[CONTADOR])
            FIMPARA
            ESCREVAL("")
            ESCREVAL("---------")
            SE RESULT_BUSCA = VERDADEIRO ENTAO
               ESCREVAL("O NÚMERO",BUSCAR,"FOI ENCONTRADO E ESTA NA POSIÇÃO",POSICAO)
            SENAO
               ESCREVAL("O NÚMERO NÃO FOI ENCONTRADO !")
            FIMSE
         CASO "C"
            escreval("QUAL NÚMERO DESEJA EXCLUIR DO VETOR: ")
            leia(BUSCAR)
            SE NUMERO[CONTADOR] = BUSCAR ENTAO
               NUMERO[CONTADOR] <- 0
               ESCREVAL("O NÚMERO",BUSCAR,"NA POSIÇÃO",POSICAO,"DO VETOR FOI EXCLUIDO !")
            FIMSE
            PARA CONTADOR DE 1 ATE NUMERO[AUX]
               PARA AUX DE CONTADOR + 1 ATE AUX FACA
                  SE NUMERO[AUX] > NUMERO[CONTADOR]
                     AUX_TEMP <- NUMERO[AUX]
                     NUMERO[AUX] <- NUMERO[CONTADOR]
                     NUMERO[CONTADOR] <- AUX_TEMP
                  FIMPARA
               FIMPARA
               ESCREVA("VALROES DO VETOR: ")
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  ESCREVAL(NUMERO[CONTADOR])
               FIMPARA
            CASO "D"
               ESCREVA("VALORES DO VETOR: ")
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  ESCREVAL(NUMERO[CONTADOR])
               FIMPARA
            CASO "E"
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  SOMA_VET <- SOMA_VET + NUMERO[CONTADOR]]
               FIMPARA
               ESCREVAL("")
               ESCREVA("A SOMA DO VETOR É:",SOMA_VET)
               
            CASO "F"
               ESCREVAL("ENCERRANDO SISTEMA...")
            OUTROCASO
               ESCREVAL("OPÇÃO INVÁLIDA !")
            FIMESCOLHA
      Fimalgoritmo
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.