Usuário com melhor resposta
Erro ao tentar dar update na tabela de Relacionamento com EF 6.1

Pergunta
-
Galera estou com um problema.
Na minha tabela de relacionamento tenho duas PK's / FK's essa tabela é apenas para relacionamento Many to Many.
O problema é que quando eu vou atualizar um registro dessa tabela ela me dá a seguinte menssagem
Essa é minha tabela:
Já tentei utilizar o EntityState.Modified e EntityState.Detached e o mesmo erro acontece.
O que pode ser?
Respostas
-
Olá Fernando,
entendi, esse update é mais trabalhoso quando é usado com uma classe genérica, mas olhando sua estrutura na tabela ParametroJoinEmpresa falta a coluna Id ou seja a chave primaria da tabela, aquela por padrão colocamos auto-incremento... Pois o entity necessita de uma PK para fazer o CRUDE veja como fica sem os relacionamentos apenas a simulação dos campos :
CREATE TABLE [dbo].[ParametroJoinEmpresa]( [IdParametro] [int] NOT NULL, [IdEmpresa] [int] NOT NULL, [Id] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_ParametroJoinEmpresa] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Quando criar essa coluna seu código vai funcionar.
- Marcado como Resposta Fernando Mamprin quinta-feira, 14 de agosto de 2014 12:02
Todas as Respostas
-
-
Fala Daniel o código é bem simples:
var join = db.RE_ParametroEmpresas.Where(j => j.IdParametro == model.codParametro && j.IdEmpresa == model.codEmpresaAlt) .Select(j => j) .FirstOrDefault(); if (join != null) { join.IdEmpresa = model.codEmpresa; join.IdParametro = model.codParametro; db.SaveChanges(); }
-
-
-
Olá Fernando,
entendi, esse update é mais trabalhoso quando é usado com uma classe genérica, mas olhando sua estrutura na tabela ParametroJoinEmpresa falta a coluna Id ou seja a chave primaria da tabela, aquela por padrão colocamos auto-incremento... Pois o entity necessita de uma PK para fazer o CRUDE veja como fica sem os relacionamentos apenas a simulação dos campos :
CREATE TABLE [dbo].[ParametroJoinEmpresa]( [IdParametro] [int] NOT NULL, [IdEmpresa] [int] NOT NULL, [Id] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_ParametroJoinEmpresa] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Quando criar essa coluna seu código vai funcionar.
- Marcado como Resposta Fernando Mamprin quinta-feira, 14 de agosto de 2014 12:02
-
Valeu Daniel.
Na verdade eu estou utilizando chave composta.
E trocando uma ideia com um parceiro meu ontem ele me disse que a chave composta pro EF é zica, e que mesmo na table de relacionamento ele faz exatamente como você mencionou, cria uma coluna ID.
Valeu pelo retorno, isso vai me ajudar.
Abraço.