ENTITY COM STORED PROCEDURE
Caros bom dia,
Imaginem a seguinte estrutura:
=> Alunos (ID, Nome, Sala)
=> Telefones (ID, FK_Aluno, Telefone1, Telefone2)
Fiz a Stored de inserção e tal, porém lá no Entity quando vai fazer a chamada, como eu lanço o FK_Aluno se eu nao consigo capturar a ID do aluno pela Classe, no caso de Stored. Na verdade eu até conseguiria mas no momento da inserção, por ser em stored, a ID aluno nao fica visivel, ou ativa naquele momento.
Bom, eu fiz uma lambda com o MAX para retornar, mas achei meio gambiarra. Como eu pegaria tal ID no ato da inserção?
Em resumo seria, como pegar o ID do Aluno para lançar em endereços..
Aproveitando, qual seria a melhor opção para relatorios em Asp.net?
Grato.
Imaginem a seguinte estrutura:
=> Alunos (ID, Nome, Sala)
=> Telefones (ID, FK_Aluno, Telefone1, Telefone2)
Fiz a Stored de inserção e tal, porém lá no Entity quando vai fazer a chamada, como eu lanço o FK_Aluno se eu nao consigo capturar a ID do aluno pela Classe, no caso de Stored. Na verdade eu até conseguiria mas no momento da inserção, por ser em stored, a ID aluno nao fica visivel, ou ativa naquele momento.
Bom, eu fiz uma lambda com o MAX para retornar, mas achei meio gambiarra. Como eu pegaria tal ID no ato da inserção?
Em resumo seria, como pegar o ID do Aluno para lançar em endereços..
Aproveitando, qual seria a melhor opção para relatorios em Asp.net?
Grato.
Você precisa da id que o aluno vai ter antes de inserir, isso?
exato KERP.
Bem, não existe uma maneira de se buscar o próximo Id antes de salvar o registro, essa é uma arquitetura errada. Você deve primeiro inserir o aluno depois inserir os telefones. São os telefones que são dependentes do aluno e não o contrário. O que você pode fazer, é inserir o aluno em um [Ô]estado nulo[Ô], inserir os telefones e depois atualizar o registro do aluno com os dados. Mas isso é ainda mais trabalhoso do que seguir o fluxo correto que é inserir o registro pai antes dos filhos...
Rpz, mas do jeito q to fazendo eu consigo salvar o ID correto no aluno na tabela endereço.
Se eu faço um lambda pegando o ID maximo do aluno, e jogo em endereço funciona normal.
Só que to achando isso uma gambiarra.
Como disse, to usando stored, dae quando a stored lança o aluno ja fica disponivel seu id, com o lambda lanço no enbdereço.
Sem falar q to lançando os dados na mesma transação.
Se eu faço um lambda pegando o ID maximo do aluno, e jogo em endereço funciona normal.
Só que to achando isso uma gambiarra.
Como disse, to usando stored, dae quando a stored lança o aluno ja fica disponivel seu id, com o lambda lanço no enbdereço.
Sem falar q to lançando os dados na mesma transação.
Então, você tem uma tabela aluno e uma tabela endereços, certo? Você pode ter múltiplos endereços por aluno, certo? O correto para a sua situação, é o famoso [Ô]De-Para[Ô], uma tabela intermediária que liga as duas, ou seja, a tabela endereço, não liga mais direto com o aluno, mas sim com essa tabela intermediária. Essa tabela, vai ter basicamente dois campos, IdAluno e IdEndereco. Assim, você pode inserir endereços à vontade, sem ter necessariamente o aluno cadastrado, depois pode criar a ligação de um com outro inserindo um registro nessa tabela intermediária.
ixi deu nó aqui.
como vou criar endereços à vontade sem saber de quem são? nao entendi direito, poderia exemplificar?
como vou criar endereços à vontade sem saber de quem são? nao entendi direito, poderia exemplificar?
Você tem a tabela de alunos
Você tem a tabela de endereços
Na tabela de alunos, tem dados do aluno e nada mais
Na tabela de endereços, tem dados de endereço e nada mais
Você tem também uma outra tabela(vamos chamar de RUAlunoEndereco), que vai ter os campos IdAluno e IdEndereço
Como endereço, não tem mais PK com a tabela aluno, você pode inserir nela qualquer endereço. E o mesmo na tabela de alunos.
Quando você quer criar um vÃnculo entre aluno e endereço, você adiciona um registro na tabela RUAlunoEndereco passando o código do aluno e também do endereço. Então, para saber os endereços que o aluno tem vinculados, você consulta a tabela RUAlunoEndereco passando para ela o id do Aluno e você terá todos os Id[ô]s de endereços associados ao aluno. O inverso também pode ser feito, você passar para RUAlunoEndereco um Id de endereço e você terá todos os alunos que estão associados à aquele endereço.
Essa associação se chama [Ô]N para N[Ô], ou muitos para muitos. Com ela você pode:
- Ter vários endereços para o mesmo aluno(imagine um filho de pais separados que hora está com um e hora com outro, ou ainda com a avó, tio...)
- Ter vários alunos para um mesmo endereço(imagine irmãos que moram todos juntos)
- Ter endereços que não estão associados à nenhum aluno
- Ter alunos sem nenhum endereço
- Criar ainda uma outra tabela, digamos RUFornecedorEndereco(e ter todas as vantagens acima para fornecedores)
Você tem a tabela de endereços
Na tabela de alunos, tem dados do aluno e nada mais
Na tabela de endereços, tem dados de endereço e nada mais
Você tem também uma outra tabela(vamos chamar de RUAlunoEndereco), que vai ter os campos IdAluno e IdEndereço
Como endereço, não tem mais PK com a tabela aluno, você pode inserir nela qualquer endereço. E o mesmo na tabela de alunos.
Quando você quer criar um vÃnculo entre aluno e endereço, você adiciona um registro na tabela RUAlunoEndereco passando o código do aluno e também do endereço. Então, para saber os endereços que o aluno tem vinculados, você consulta a tabela RUAlunoEndereco passando para ela o id do Aluno e você terá todos os Id[ô]s de endereços associados ao aluno. O inverso também pode ser feito, você passar para RUAlunoEndereco um Id de endereço e você terá todos os alunos que estão associados à aquele endereço.
Essa associação se chama [Ô]N para N[Ô], ou muitos para muitos. Com ela você pode:
- Ter vários endereços para o mesmo aluno(imagine um filho de pais separados que hora está com um e hora com outro, ou ainda com a avó, tio...)
- Ter vários alunos para um mesmo endereço(imagine irmãos que moram todos juntos)
- Ter endereços que não estão associados à nenhum aluno
- Ter alunos sem nenhum endereço
- Criar ainda uma outra tabela, digamos RUFornecedorEndereco(e ter todas as vantagens acima para fornecedores)
Pelo q entendi, vou ter q fazer 3 inserts entao na mesma transação.
1a. pegar o id do aluno (q pressupoe um insert);
2a. pegar id do endereço(iden); e
3a. lançar ambos os ids na 3a tabela.
1a. pegar o id do aluno (q pressupoe um insert);
2a. pegar id do endereço(iden); e
3a. lançar ambos os ids na 3a tabela.
Isso mesmo.
rpz boa ideia, mas vc nao acha como to fazendo menos [Ô]custoso[Ô] ao sistema?
Tópico encerrado , respostas não são mais permitidas