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?
Il manquait PK à ma table de mappage plusieurs à plusieurs.
ajouté, et le problème est résolu.
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.
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:
DefiningQuery
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:
<DefiningQuery>
entièrementstore:Type="Views"
par store:Type="Tables"
Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML
Localisez l'entité dans l'élément edmx: StorageModels
Supprimer complètement le DefiningQuery
Renommez le store:Schema="dbo"
en Schema="dbo"
(sinon, le code générera une erreur indiquant que le nom est invalide)
Ma table n'avait pas de clé primaire dans la conception de table SQL. Ajouté et résolu.
** 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.
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
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
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)