web-dev-qa-db-fra.com

car il a un DefiningQuery et qu'aucun élément <InsertFunction> n'existe dans l'élément <ModificationFunctionMapping>

J'utilise EF dans mon application.

J'essaie de sauvegarder\insérer un nouvel enregistrement dans une table de mappage

et obtenez 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?

49
Elad Benda

Il manquait PK à ma table de mappage plusieurs à plusieurs.

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

87
Elad Benda

D'accord avec la réponse acceptée ... Tout en fournissant la raison derrière cela ...

Lorsque le mappage EF est effectué avec une table qui n'a pas de clé primaire, elle est considérée comme une vue et les vues sont des entités logiques ne pouvant être mises à jour.

Donc, soit ajoutez la clé primaire manquante dans les tables ur, soit considérez-les comme voir & n'effectuez aucune opération de mise à jour dessus. 

37
Biki

Si votre vue est modifiable, vous pouvez simplement supprimer le élément de la définition EntitySet pour votre vue à l'intérieur du fichier Section StorageModel de votre .edmx et traitement de la mise à jour normal fonctionnera comme avec n'importe quelle autre table.

C'est le cas pour moi. La simple suppression entraîne une autre erreur. J'ai suivi les étapes de ce post sauf le dernier. Pour votre commodité, j'ai copié les 4 étapes du message que j'ai suivi pour résoudre le problème comme suit:

  1. Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML 
  2. Localisez l'entité dans l'élément edmx: StorageModels
  3. Supprimer complètement la DefiningQuery 
  4. Renommez le magasin: Schema = "dbo" en Schema = "dbo" (sinon, le code générera une erreur indiquant que le nom est invalide) 
22
kavitha Reddy

Je suis tombé sur ce problème dans une vue pouvant être mise à jour. Trouvé cet article résolu mon problème. 

Donc, la table sous-jacente de ma vue a une clé primaire définie, mais EF ne sait pas quelles colonnes se trouvent dans la PK car l'entité a été construite sur la vue. Le truc ici est de "convaincre" EF que votre vue peut être mise à jour sous forme de tableau. Les étapes sont presque les mêmes que celles mentionnées dans les réponses ci-dessus:

  1. Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML
  2. Localisez l'entité dans l'élément edmx: StorageModels
  3. Supprimer la section <DefiningQuery> entièrement
  4. Renommez le magasin: Schema = "dbo" en Schema = "dbo"
  5. Remplacez store:Type="Views" par store:Type="Tables"
4
wctiger
  1. Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML

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

  3. Supprimer complètement le DefiningQuery

  4. Renommez le store:Schema="dbo" en Schema="dbo" (sinon, le code générera une erreur indiquant que le nom est invalide)

4
user3452580

Ma table n'avait pas de clé primaire dans la conception de table SQL. Ajouté et résolu.

2
Rajdeep

** Vérifiez à nouveau que vos tables ne possèdent pas de clé PK: ** ajoutez simplement la clé primaire, puis supprimez et ajoutez de nouveau la table à edmx.

2
Moji

Assurez-vous que vos tables de clés étrangères ne possèdent pas plus d'un nom de colonne correspondant à celles de votre table de référence. seule la clé primaire doit correspondre entre votre table de référence et la table référée. 0..1 devrait avoir un nom de colonne distinct, développer une convention de dénomination pour vos colonnes qui garantira que les tables référentes et référencées n’ont pas plus d’un nom de colonne correspondant. Gracieuseté de ALMwConsult.net

1
Duncan Kuffar

Si vous ne gérez pas la clé primaire dans votre table, ce problème Se produira définitivement dans MVC lors de la mise à jour et de l'insertion de la base de données d'enregistrement.

L'exception DbUpdate n'a pas été gérée par l'utilisateur

1
bajran

Travailler sur db première application MVC. Le problème était que j'oublie de définir la clé primaire pour la table. Résolu en ajoutant la clé primaire à l'aide de la commande alter et en mettant à jour le DAL (edmx)

0
Hafte Nigus