Inquiridor
Atualizar Campo Foreign Key / Linq To Entities

Pergunta
-
Boa Tarde,
Possuo em um DATABASE SQL SERVER uma tabela chamada DESPESA e outra SITUACAO, elas estão relacionadas, onde o ID_SITUACAO é FK na TABELA DESPESA, até ai OK.
A questão é que preciso criar um método que usando o LINQ atualize apenas este campo na tabela DESPESA.
Meu código hoje está assim
Public Function AtualizarSituacaoDespesa(ByVal despesa As Entity.DESPESA, ByVal situacaoId As Long) As Boolean Implements IDespesaDao.AtualizarSituacaoDespesa
Reparem que recupero a despesa original atribuo a despesa para depois setar a situação, faço isso pois a despesa passada como parâmetro possui apenas
'Contexto representa as entidades geradas pelo Entity Framework
Dim contexto As MeuEntities = MeuDataContext.CurrentContext Dim key As EntityKey = contexto.CreateEntityKey("DESPESA", despesa) Dim _despesaOriginal As Object If contexto.TryGetObjectByKey(key, _despesaOriginal) Then despesa = _despesaOriginal despesa.SITUACAO = New SITUACAO() despesa.SITUACAO.ID = situacaoId contexto.ApplyPropertyChanges( _ key.EntitySetName, _ despesa) End If Try Return contexto.SaveChanges() > 0 Catch ex As Exception End Try End Function
os valores do ID e da SITUACAO original, e como os demais campos estavam nulos se chamasse o SaveChanges direto daria erro nos campos no banco que não podem ser nulos.
A questão é: ao chamar o SaveChanges, recebo uma mensagem informando que o campo DESCRICAO na tabela SITUACAO não pode ser nulo. parece que de alguma forma ele está tentando inserir um registro na tabela SITUACAO em vez de atualizar o campo ID_SITUACAO na tabela despesa.
Alguém pode me ajudar?
Desde já agradeço.
Se o post foi útil marque como resposta. - Advanced Web Application - MCP
Todas as Respostas
-
Marcus,
Tem como vc postar a config (dbml) destas tabelas ?
Desculpe, mas qual era sua intenção com este código :
If contexto.TryGetObjectByKey(key, _despesaOriginal) Then despesa = _despesaOriginal despesa.SITUACAO = New SITUACAO() despesa.SITUACAO.ID = situacaoId contexto.ApplyPropertyChanges( _ key.EntitySetName, _ despesa) End If
Mais detalhes veja:
http://blogs.msdn.com/efdesign/archive/2008/10/27/foreign-keys-in-the-conceptual-and-object-models.aspx
Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/ -
Obrigado Nelson,
Descobri aonde estava errando, na verdade estava errando ao tentar setar as propriedades do objeto manualmente, o certo era fazer isso usando o contexto do banco de dados, ou seja preenchendo o valor dos objectos através de uma consulta ao banco em evz de setar manualmente as propriedades.
Por um lado é ruim, pois necessita mais uma ida desnecessária ao banco
Se o post foi útil marque como resposta. - Advanced Web Application - MCP -
Olá,
Estou com o mesmo problema ao setar a chave estrangeira. Tenho um objeto cliente que possui contatos, após gravar o cliente preciso gravar os contatos do cliente.using (linqEntities context = new linqEntities()) { cliente c = new cliente(); c.clnRazaoSocial = "Empresa 1"; context.AddObject("cliente", c); context.SaveChanges(); contato t = new contato(); t.cliente = new cliente(); ---> aqui não deve estar correto,
Como seto a chave estrangeira?
pois após a execução ele cria dois registros cliente e um contato,
sendo que o contato aponta para o segundo registro cliente. t.cliente.clnId = c.clnId; t.cttNome = "Contato 1"; context.AddObject("contato",t); context.SaveChanges(); }
Grato.
Maia.