Recebo este erro ao gravar no banco de dados:
Uma propriedade dependente em um ReferentialConstraint é mapeada para uma coluna gerada pela loja. Coluna: 'PaymentId'.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
O esquema é:
c#
sql-server-2008
linq-to-sql
entity-framework-4
Rei galês
fonte
fonte
(e as System.Data.Entity.Infrastructure.DbUpdateException).Entries
,), poderá ver qual tabela contém a chave primária sendo referenciada.Este erro diz que você está usando relação não suportada ou que há um erro no seu mapeamento. Provavelmente, seu código não está relacionado ao erro.
O erro significa que você tem alguma relação entre entidades em que a propriedade da chave estrangeira na entidade dependente é definida como gerada pelo armazenamento. As propriedades geradas pela loja são preenchidas no banco de dados. EF não oferece suporte a armazenar propriedades geradas como chaves estrangeiras (bem como propriedades computadas em chaves primárias).
fonte
PaymentID
e trate disso.Eu tive o mesmo problema. Com base nas respostas fornecidas aqui, fui capaz de rastreá-lo e resolvê-lo, mas tive um problema estranho descrito abaixo - pode ajudar alguém no futuro.
Em minhas tabelas dependentes, as colunas de chave estrangeira foram definidas como StoreGeneratedPattern = "Identity". Tive que mudar para "Nenhum". Infelizmente, fazer isso por dentro do designer não funcionou.
Eu olhei no XML gerado pelo designer (SSDL) e essas propriedades ainda estavam lá, então eu as removi manualmente. Também tive que consertar as colunas do banco de dados (remover a identidade (1,1) de CREATE TABLE SQL)
Depois disso, o problema foi embora.
fonte
Eu tive o mesmo problema e depois de pesquisar no design da tabela no sql server, descobri que, por engano, configurei a chave primária da tabela também como chave estrangeira.
Nesta imagem você pode ver que JobID é a chave primária da tabela, mas também a chave estrangeira por engano.
fonte
Meu problema foi causado pela definição redundante da chave primária na configuração.
Remova esta linha
Exemplo http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
Isso é o suficiente para definir a relação
fonte
Verifique novamente a relação entre o Pagamento e as outras tabelas / entidades. Incluindo aqueles que não deveriam conter PaymentId, porque é onde o problema provavelmente está escondido.
Ao criar chaves externas no SQL Server Management Studio, a chave primária é padronizada, e esse padrão é revertido quando a tabela pai é alterada, portanto, tome cuidado para alterar os valores na ordem correta na janela "Tabelas e colunas".
Além disso, depois de corrigir o relacionamento problemático, há uma boa chance de que um simples "Atualizar" no modelo não remova corretamente o relacionamento incorreto do modelo e você receberá o mesmo erro mesmo após a " correção ", portanto, faça você mesmo no modelo antes de realizar uma atualização. (Descobri isso da maneira mais difícil.)
fonte
Se você verificou seus relacionamentos e está bem lá.
Exclua a tabela no edmx e atualize do banco de dados. Isso evitará que você faça a atualização manualmente.
fonte
Para mim, era uma chave estrangeira colocada incorretamente na tabela, mas mesmo depois de alterar a tabela para corrigi-la, ainda não estava funcionando. Você precisa atualizar os arquivos EDMX (e não o suficiente para "atualizar" a tabela do modelo, você precisa remover e adicionar a tabela novamente no modelo).
fonte
Além da resposta aceita, se você estiver usando EF reverso POCO gerador ou alguma outra ferramenta que gera o seu POCO, certifique-se de regenerar -los!
fonte
No meu caso, o problema foi causado por ter um relacionamento 1-1 bidirecional:
Tive que simplesmente remover uma das duas chaves estrangeiras (não é necessário de qualquer maneira).
fonte
No meu caso, era simplesmente porque eu não tinha as permissões definidas corretamente no banco de dados. Eu tinha lido apenas set e o framework Entity estava me dando um erro ReferentialConstraint que me confundiu. Adicionadas permissões de gravação adicionais e tudo estava bem.
fonte
No meu caso, eu tinha uma propriedade Database Generated e uma propriedade de navegação ForeignKey configurada para fazer referência a uma tabela relacionada de 1 para 1.
Isso não era algo que eu pudesse remover, eu precisava ser capaz de definir a chave primária da entidade para ser gerado pelo banco de dados E precisava ser capaz de fazer referência à tabela 1 para 1 como uma propriedade de navegação.
Não tenho certeza se isso é o mesmo para os outros, mas esse problema só aparecia ao criar uma nova entidade, ler ou editar entidades existentes não exibia o problema, então resolvi o problema criando uma versão herdada do meu Contexto e usando o método Fluent para desligar a propriedade de navegação ao criar.
Então, minha entidade original era assim:
Então, criei um contexto herdado especial que se parecia com este:
e então mudou o código que criou a nova entidade para tornar o usuário do novo tipo de contexto
Espero que isso ajude alguém
fonte
No meu caso, o campo Id que é FK apenas no Entity Framework a propriedade "StoreGeneratedPattern" foi definida como "Itentity" em vez de "None"
fonte