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

Framework .NET Discussion :

[Entity Framework] Insertion de donnée avec LINQ to Entities


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut [Entity Framework] Insertion de donnée avec LINQ to Entities
    Bonjour!

    Lorsque j'essaye d'insérer une ligne dans ma base de donnée, je passe par la méthode suivante:

    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
    16
     
     public class Method
        {
            private static ISMS.Models.isms_databaseEntities db = new isms_databaseEntities();
     
            public void AddMethod(string _methodName)
            {
                tbl_method newMethod = new tbl_method();
                newMethod.met_name = _methodName;
                newMethod.tbl_client.cli_id = (int)1;
                db.AddTotbl_method(newMethod);
                db.SaveChanges();
            }
     
       // du code
    }
    Le seul problème, c'est qu'à l'éxecution, ça plante sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    newMethod.tbl_client.cli_id = (int)1;
    lorsque j'essaye d'insérer la clé étrangère pour indiqué quel utilisateur (ici tbl_client) possède cette nouvelle ligne de la table tbl_method. Est-il nécessaire d'instancier également la table tbl_client, sachant qu'on insère dans la clé étrangère ce trouvant dans la table tbl_client?

    Ceci, notamment à cause du mapping que fait EF. Je pense qu'il ne créer pas un champ avec une clé étrangère, mais plutôt va référencer sur le champ de la table contenant notre clé étrangère (tbl_client) de notre table principale (tbl_method), ce qui entraine donc une erreur de type

    Object reference not set to an instance of an object

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    bon alors déjà, le t'oublie le framework va automatiquement le convertir en int.

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newMethod.tbl_client.cli_id
    tbl_client c'est effectivement le loading d'EF mais comme on fait du lazy loading c'est vide.

    je pense que tu dois avoir une autre propriété sur ton objet tbl_method. par exemple
    tbl_method.id_client = 1; ou un truc du genre. Il faudrait connaitre la structure de ta table.




    pour finir, il va falloir revoir tes conventions de nommage si un jour tu bosses en équipe. Coté sql, appeler une table tbl_method n'est pas gênant (meme si tu verras plus souvent T_METHOD ou t_method), par contre, côté modèle C#, c'est moche. Ton objet représente une méthode mais pas une table de méthode quand tu fais tbl_method m = new tbl_method.
    donc comme EF te le permet, prend l'habitude dans le designer EF, de renommer les classes coté C#, car ces noms n'ont pas besoin d'être identiques à la DB. Met plutôt Method, Client, etc. Au moins les noms sont parlants.
    le nommage reste ton choix, mais il y a des conventions implicites qu'une majorité des développeurs utilisent, et le mieux est de rapidement prendre l'habitude d'utiliser ces conventions. Ca sera plus simple quand tu reprendras des projets d'autres personnes, ou l'inverse

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Merci pour ta réponse.

    Effectivement, le nommage c'est un point que je dois améliorer Je vais corriger ça, et je te poste dès que possible le schéma des tables pour que ça soit plus parlant que ça

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Voilà donc une petite capture des 2 tables concernées :


  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Je suis actuellement en train de lire un bouquin sur LINQ pour voir si j'arrive à résoudre mon problème.

    Si quelqu'un à des propositions/solution, je suis preneur (toujours bloqué )

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    J'ai trouvé une possible solution ici.

    Seul soucis, je ne suis pas bien sûr de comprendre la signification des possibles problèmes que cette solution peut apporter:

    This solution is essentially just a workaround that hides some of the limitations of independent associations, and like all workarounds it has limitations. The key then is to make an informed tradeoff between the benefits and the drawbacks. So here are some of the key drawbacks:

    1. Properties in the partial class are not recognized by the Entity Framework, so you can't use them in your LINQ queries.
    2. By referencing the fully qualified EntitySet name in our setter, we have coupled your Entity Class directly to the EntitySet. Now for most people this is not a problem, but it won't work if you try to re-use your entity classes between contexts or if you use MEST.
    3. There are probably more... I'll add them as I think of them!
    Si quelqu'un voit de quoi ça parle, merci d'avance

    Bonne soirée!

    L.

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

Discussions similaires

  1. Insertion de données avec php5
    Par Ludo75 dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2010, 15h18
  2. [Entity Framework] Insert avec clé étrangère
    Par Yoshio dans le forum Framework .NET
    Réponses: 8
    Dernier message: 27/03/2009, 17h33
  3. [MySQL] Insertion de données avec apostrophes dans ma base
    Par kawther dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/04/2007, 09h06
  4. Insertion de données avec Posgretsql
    Par djibril dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/05/2004, 11h23
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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