Jump to content
  • 0
caiiovox

[RESOLVIDO] Migrations .NET

Question

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

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 0

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'.

Share this post


Link to post
Share on other sites
  • 0
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 ?

Share this post


Link to post
Share on other sites
  • 0
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

Share this post


Link to post
Share on other sites
  • 0
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.

Share this post


Link to post
Share on other sites
  • 0
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.

Share this post


Link to post
Share on other sites
  • 0

Não bro kk

Numero id = NumeroId

public Guid NumeroId { get; set; }

E o id do aparelho também

public Guid AparelhoId { get; set; }

 

Share this post


Link to post
Share on other sites
  • 0

Isso. 

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

Share this post


Link to post
Share on other sites
  • 0

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 ?

Share this post


Link to post
Share on other sites
  • 0

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... 

Share this post


Link to post
Share on other sites
  • 0

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 !!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 409.454.408-98
      Faça um programa em linguagem de programação C++ para resolver o problema abaixo:
       
      “Dado um número inteiro positivo N, determinar:
      (a) o total de dígitos pares de N;
      (b) o total de dígitos impares de N;
      (c) a soma dos dígitos de N;
      (d) qual é o maior e qual é o menor digito que ocorre em N;”
    • By Sullyvanmarks
      Estou iniciando agora com javascript e tenho vários códigos de javascript que não funcionam e não consigo resolvê-los. Alguém poderia me ajudar?
       
       







    • By eduardohaag
      Olá,
      Mais uma vez aqui estou eu com uma duvida que não estou conseguindo resolver.
      Estou desenvolvendo um ERP para a grafica da minha esposa. Nesse sistema existe um modulo que registra o tempo trabalhado.
      Para fazer isso existe um botão no formulário principal, que quando é clicado salva a hora na variável entrada, e quando clicado novamente ele registra no banco de dados o intervalo entre a entrada e saida.
      Até ai tudo ok. Porém as vezes a pessoa sai e esquece de clicar para registrar a saida.
       
      Então gostaria de fazer com que a cada 5 minutos fosse verificado se teve alteração na posição do ponteiro do mouse, porém permitindo que o usuário possa usar o programa.
       
      Procurando na internet descobri que para isso o melhor seria usar uma thread para fazer essa verificação da posição do mouse em segundo plano já que seria executado a cada 5 minutos e dessa forma travaria a execução do form principal.
       
      O problema está que quando ele detecta que mouse ficou parado por mais de 5 minutos e executa o codigo que salvo o intervalo no banco de dados acontece esse erro quando chega na linha "btEntrada.Text = "Registrar Entrada"" : "System.InvalidOperationException: 'Operação entre threads inválida: controle 'ToolStrip1' acessado de um thread que não é aquele no qual foi criado.'
       
      Li que tenho que usar algo como invoke e delegate, mas mesmo estudando não consegui entender como implementar.
      meu codigo é o seguinte:
       
      Imports System.ComponentModel Public Class Principal_content Dim saida As DateTime Dim tempo As TimeSpan Dim entrada As DateTime Dim ponteiro As Point Sub GerPonto() Do Threading.Thread.Sleep(5000) If ponteiro = Cursor.Position Then Call registraponto() End If ponteiro = Cursor.Position Loop End Sub Private Sub btEntrada_Click(sender As Object, e As EventArgs) Handles btEntrada.Click Call registraponto End Sub Sub registraponto() Dim trd = New Threading.Thread(AddressOf GerPonto) If btEntrada.Text = "Registrar Entrada" Then entrada = FormatDateTime(Now) btEntrada.Text = "Registrar Saida" btEntrada.ToolTipText = "Registrar Saida" btEntrada.Image = My.Resources.appointment_new_Ativo btEntrada.ForeColor = Color.Lime trd.Start() Else trd.Abort() saida = Now tempo = saida.Subtract(entrada) sql = "INSERT INTO ponto (Data, Entrada, Saida, Segundos) VALUES (#" & Format(entrada, "MM/dd/yyyy") & "#, #" & Format(entrada, "hh:mm:ss") & "#, #" & Format(saida, "hh:mm:ss") & "#, " & Replace(FormatNumber(tempo.TotalSeconds, 0, TriState.False, TriState.False, TriState.False), ",", ".") & ")" btEntrada.Text = "Registrar Entrada" btEntrada.Text = "Registrar Entrada" btEntrada.Image = My.Resources.appointment_new_desativo btEntrada.ForeColor = Color.Red AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteNonQuey) End If End Sub End Class  
    • By RonaldoBrJu100
      Suponha que um caixa disponha de notas de 1, 2, 5, 10, 20, 50 e 100 reais. Considerando que alguém está pagando uma compra, escreva um algoritmo que mostre o número mínimo de notas que o caixa deve fornecer como troco. Mostre também: o valor da compra, o valor do troco e a quantidade de cada tipo de nota do troco. Suponha que o sistema monetário não utilize moedas.
    • By laumello12
      Galera ajudinha
      Como faço para consumir um web service pronto em um projeto. Preciso só que ele busque no web service e traga na web 
      HELP
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.