IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

Unable to update the EntitySet Table


Sujet :

Entity Framework

  1. #1
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut Unable to update the EntitySet Table
    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 :

    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
    [Extrait de code]

    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 :
    " Invalid object name 'BCE25DBModelStoreContainer.TCITMCDE'".
    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...

    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par chewing-gum Voir le message
    Le problème, c'est que je ne peux pas modifier cette table qui, effectivement, ne possède pas de clé primaire.
    Utiliser un ORM sur des tables sans clé primaire, c'est un peu contre nature... C'est peut-être possible, mais au prix de grosses bidouilles dégueulasses

    Citation Envoyé par chewing-gum Voir le message
    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).
    Bah c'est un peu bidon comme excuse... je ne vois pas en quoi le fait d'ajouter une clé primaire pourrait casser un script d'export, à moins que le dit script ait été développé avec les pieds. Avec ce genre d'argument ("on touche pas parce qu'on risque de casser quelque chose"), on pourrait jamais faire évoluer aucun système...
    Vous avez qu'à tester ça dans un environnement de dev, comme ça pas de risque d'impacter la prod si ça pose un problème

  3. #3
    Membre habitué Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Points : 137
    Points
    137
    Par défaut
    Bon, suite à mes persécutions... euh "insistance" plutôt... j'ai obtenu le droit de définir une clé primaire donc ça fonctionne...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2012, 16h19
  2. Réponses: 4
    Dernier message: 18/10/2011, 09h29
  3. Réponses: 3
    Dernier message: 09/02/2011, 17h31
  4. Update entre 2 tables
    Par jfox dans le forum SQL
    Réponses: 8
    Dernier message: 04/11/2003, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo