62 votes

parce qu'il possède une DefiningQuery et qu'aucun élément <InsertFunction> n'existe dans l'élément <ModificationFunctionMapping>.

J'utilise EF dans mon application.

J'essaie d'économiser \insert un nouvel enregistrement dans une table de correspondance

et obtenir l'erreur suivante :

Unable to update the EntitySet 'UsersLimitationToCountry' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

Dois-je le définir moi-même dans l'edmx ? Comment ?

108voto

Elad Benda Points 4773

Ma table de correspondance many-to-many était manquante PK

ajouté, et le problème est résolu.

49voto

Biki Points 466

D'accord avec la réponse acceptée. Je donne juste la raison derrière...

Lorsque le mappage EF est effectué avec une table qui n'a pas de clé primaire, celle-ci est traitée comme une vue. Comme les vues sont des entités logiques, elles ne peuvent pas être mises à jour.

Donc, soit vous ajoutez la clé primaire manquante à votre table, soit vous les considérez comme une vue et n'effectuez aucune opération de mise à jour sur eux.

28voto

kavithaReddy Points 146

Si votre vue peut être mise à jour, vous pouvez simplement supprimer la balise de la définition de l'EntitySet de votre vue dans la section StorageModel de votre .edmx, et le traitement normal de mise à jour fonctionnera comme avec n'importe quelle autre table.

C'est le cas pour moi. La simple suppression a entraîné une autre erreur. J'ai suivi les étapes de ce post sauf la dernière. Pour votre confort, j'ai copié les 4 étapes du post que j'ai suivies pour résoudre le problème comme suit :

  1. Cliquez avec le bouton droit de la souris sur le fichier edmx et sélectionnez Ouvrir avec, éditeur XML.
  2. Localiser l'entité dans l'élément edmx:StorageModels
  3. Retirer le DefiningQuery entièrement
  4. Renommez le store:Schema="dbo" en Schema="dbo" (sinon, le code générera une erreur disant que le nom est invalide)

12voto

wctiger Points 480

J'ai rencontré ce problème sur une vue actualisable. Trouvé cet article a résolu mon problème.

Ainsi, la table sous-jacente de ma vue a bien une clé primaire définie, mais EF ne sait pas quelles colonnes sont dans la clé primaire puisque l'entité a été construite sur la vue. L'astuce ici est de 'convaincre' EF que votre vue peut être mise à jour comme une table. Les étapes sont presque les mêmes que celles mentionnées dans les réponses précédentes :

  1. Cliquez avec le bouton droit de la souris sur le fichier edmx et sélectionnez Ouvrir avec, éditeur XML.
  2. Localiser l'entité dans l'élément edmx:StorageModels
  3. Retirer le <DefiningQuery> section entièrement
  4. Renommez le fichier store:Schema="dbo" en Schema="dbo".
  5. Changement store:Type="Views" a store:Type="Tables"

4voto

user3452580 Points 33
  1. Cliquez avec le bouton droit de la souris sur le fichier edmx et sélectionnez Ouvrir avec, éditeur XML.

  2. Localiser l'entité dans l'élément edmx:StorageModels

  3. Supprimer entièrement le DefiningQuery

  4. Renommer le store:Schema="dbo" a Schema="dbo" (sinon, le code générera une erreur disant que le nom est invalide) Ces étapes ont fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X