Array
(
)

EF9 - Edit Navigation Property (relação 1:n)

João Effting
   - 15 ago 2014

Boa tarde,
alguém já teve este problema e soube como resolver?
No meu método Edit, eu faço o seguinte

db.Entry(aluno).State = EntityState.Modified;
db.SaveChanges();
dentro da tabela aluno, eu tenho um Professor, que é a relação. Ali, ele já tá com o professor alterado (modifiquei o professor X, do aluno, para Y).
Mas ele não faz a alteração na base :(((
Já tentei diversos exemplos que procurei na internet, mas nenhum resolveu esse problema.

abs,
João

Joel Rodrigues
   - 15 ago 2014

Como você está alterando o Professor?

João Effting
   - 15 ago 2014

Eu recupero o id do novo professor, e dentro do Edit eu faço uma busca para preencher o restante da classe com os dados desse professor.

basicamente isso, dentro do Edit

//Aqui, dentro de aluno.Professor, eu só tenho o idProfessor do novo professor.
aluno.Professor = db.PROFESSORES.Where(w => w.idProfessor == aluno.Professor.idProfessor).FirstOrDefault();

db.Entry(aluno).State = EntityState.Modified;
db.SaveChanges();

Joel Rodrigues
   - 18 ago 2014

No seu código, onde está o Id do novo professor? Eu estou entendendo, pelo seu código, que você está atribuindo o próprio Professor que já faz parte do aluno.

João Effting
   - 19 ago 2014

Bom dia Joel,

então, eu fiz baseada nessa video aula do Guinter, e uma outra que era de relacionamento 1:n (busca tá fora pra mim, dai não tô conseguindo acessar o endereço do segundo video)

http://www.devmedia.com.br/relacionamentos-n-para-n-com-ef-entity-framework/30816

Como ele fez ali, não existe um idProfessor dentro do Aluno, porque fica abstraido, e o Entity se encarrega do resto (quando é criado no banco, dai sim existe o idProfessor na tabela de aluno). E faz isso mesmo, porque quando eu cadastro o Aluno, e digo qual é o professor, eu só passo pra Aluno.Professor, o professor que ele escolheu. E funciona perfeitamente. Eu andei pesquisando, e outras pessoas tiveram esse mesmo problema que eu, que ao editar uma classe que tenha esse tipo de mapeamento, não atualiza as Navigations Propertys. Alguns até recomendaram o nHibernate, porque lá isso funciona perfeitamente. Eu, como já tô em uma fase avançada do projeto, manterei o Entity. Mas para o próximo, vou testar o nHibernate. Ou vou fazer com os ids na própria tabela mesmo.
Mas, para agora, a solução vai ser alterar na mão mesmo com native sql, porque é uma restrição do EF :\

Joel Rodrigues
   - 19 ago 2014

Estranho.
Vou fazer um teste aqui e verificar se consigo simular o problema. Qualquer coisa, volto aqui para avisar.

João Effting
   - 20 ago 2014

Ok, fico no aguardo.