Isso está me deixando louco, e o erro não tem sentido para mim:
Não foi possível atualizar o EntitySet 'TableB' porque ele possui um DefiningQuery e nenhum elemento existe no elemento para oferecer suporte à operação atual.
Minhas tabelas são colocadas assim:
TabelaA int idA (identidade, chave primária) ... Tabela B int idA (FK para TableA.idA) int val
TabelaB não possui chave primária definida no servidor SQL. O Entity Framework importou a tabela e a associação e definiu os dois campos como chave. Mas ele emitirá esse erro quando tento fazer uma inserção na tabela!
O que há de errado??
Edit: Como sugerido por Alex, a solução foi esta:
- Clique com o botão direito do mouse no arquivo edmx, selecione Abrir com, editor XML
- Localize a entidade no elemento edmx: StorageModels
- Remova completamente o DefiningQuery
- Renomeie o armazenamento: Schema = "dbo" para Schema = "dbo" (caso contrário, o código gerará um erro dizendo que o nome é inválido)
- Remova a propriedade store: Name
Deixei a chave como estava, pois não havia problema em mim que as duas colunas fizessem parte da chave.
asp.net
entity-framework
Palantir
fonte
fonte
Respostas:
Bem, quando uma tabela é encontrada sem uma PrimaryKey, ela é tratada como uma View.
E as visualizações são exibidas no arquivo EDMX (aberto em um editor XML para ver) no elemento StorageModel \ EntitySet [n] \ DefiningQuery.
Quando você tem um DefiningQuery, a Entidade se torna somente leitura, a menos que você adicione funções de modificação. Você precisa de 3 funções de modificação (também conhecidas como Procedimentos Armazenados), uma para cada uma das Inserções, Atualizações e Exclusões.
Mas você tem duas opções:
Mude a definição de chave:
No seu caso, eu recomendo (1).
fonte
Basta adicionar uma chave primária à tabela. É isso aí. Problema resolvido.
fonte
Estava faltando uma chave primária na minha mesa e recebi esta mensagem de erro. Uma coisa que notei foi que depois de adicionar a chave à tabela, eu precisava limpar a tabela do edmx usando o designer, salvar o edmx e atualizá-lo novamente para adicionar a tabela novamente. Não estava pegando a chave já que já foi atribuído como uma visualização. Isso não exigiu a edição manual do edmx.
fonte
Adicione a chave primária à tabela, exclua o modelo do modelo edmx e selecione atualização do banco de dados, crie e execute ...... works
fonte
@Palantir. Verifique se as duas tabelas estão com Chaves Primárias definidas e tenha cuidado com várias chaves primárias definidas em uma tabela.
fonte
Espero que isso resolva o problema.
fonte