Bonjour,
Je développe actuellement une application web pour mon entreprise, et je me trouve confronté à un problème...
[Quand est-ce que le problème apparaît ?]
Dans le contexte de l'application, un gestionnaire doit valider une commande (un formulaire POST avec un bouton "valider la commande").
Lorsque le gestionnaire cliquer sur "valider la commande", je dois créer une liste d'objets (des "items") et les enregistrer dans une base de données. Mais au moment de l'appel de la méthode "_context.SaveChanges()", j'obtiens l'erreur suivante :
[Extrait de code]Unable to update the EntitySet "TCITMCDE" because it has a DefiningQuery and no InsertFunction element exists in the ModificationFunctionMapping element to support the current operation
Voici le code que j'utilise, et qui déclence donc une InnerException (le code est volontairement simplifié) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 foreach (ArticleDemande articleDemande in demande.ARTICLE_DEMANDE) { TCITMCDE tcitemcde = new TCITMCDE(); tcitemcde.NUMCDE = 123456; // Initialisation des champs de l'item // ... // ... _context.AddToTCITMCDE(tcitemcde); } _context.SaveChanges();
[Des solutions inapplicables ?]
J'ai trouvé des solutions, mais ils sembleraient que je n'arrive pas à les appliquer, ou bien qu'elles soient inapplicables à cause du modèle de la base de données...
-> 1ère solution inapplicable : Ajouter une clé primaire à la table "TCITMCDE". Le problème, c'est que je ne peux pas modifier cette table qui, effectivement, ne possède pas de clé primaire.
A noter que je ne suis pas à l'origine de cette base de données qui existe depuis le début des années 90', et qui a été migrée pour passer de DB2 à SQL Server.
Je ne peux pas la modifier pour des raisons de... euh... hum... Disons que le service informatique a ses raisons qu'il préfère garder, et que des remontées d'informations sont faites entre cette base et SAP. Ils ont donc peur que leur script automatique ne fonctionne plus vraiment entre SAP et cette base (d'autant plus que cela concerne des commandes, et donc de l'argent).
-> Deuxième solution : retirer le bloc contenant la "DefiningQuery" dans mon modèle EDMX. Or, lorsque je retire ce bloc, j'ai de nouveau une autre erreur :
Bref, j'aimerai savoir s'il y a moyen de faire marcher tout ça avec l'Entity Framework, ou si je suis malheureusement obligé de passer par une procédure stockée..." Invalid object name 'BCE25DBModelStoreContainer.TCITMCDE'".
Merci.
Partager