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

Accès aux données Discussion :

[C#][Linq to Sql] Ajout de données ?


Sujet :

Accès aux données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut [C#][Linq to Sql] Ajout de données ?
    Bonjour à tous,

    Je me suis crée un projet et une db test pour me familiariser avec Linq.
    Ma db est très simple :
    - Article (ArticleId, ArticleCode, BrandId)
    - Brand (BrandId, BrandLabel)

    Voici mes 2 classes de mapping

    Mapping sur la table Article
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
       [Table(Name = "Article")]
       class Article
       {
          private int m_ArticleId;
          private string m_ArticleCode;
          private int m_BrandId;
          private EntityRef<Brand> m_Brand;
     
          [Column(Storage = "m_ArticleId", IsPrimaryKey = true)]
          public int ArticleId
          {
             get { return m_ArticleId; }
             set { m_ArticleId = value; }
          }
     
          [Column(Storage = "m_ArticleCode")]
          public string ArticleCode
          {
             get { return m_ArticleCode; }
             set { m_ArticleCode = value; }
          }
     
          [Column(Storage="m_BrandId")]
          public int BrandId
          {
             get { return m_BrandId; }
             set { m_BrandId = value; }
          }
     
          [Association(Storage="m_Brand", ThisKey="BrandId")]
          public Brand Brand
          {
             get { return m_Brand.Entity; }
             set { m_Brand.Entity = value; }
          }
       }

    Mapping sur la table Brand
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
       [Table(Name="Brand")]
       class Brand
       {
          private int m_BrandId;
          private string m_BrandLabel;
          private EntitySet<Article> m_Article;
     
          [Column(Storage = "m_BrandId", IsPrimaryKey=true)]
          public int BrandId
          {
             get { return m_BrandId; }
             set { m_BrandId = value; }
          }
     
          [Column(Storage = "m_BrandLabel")]
          public string BrandLabel
          {
             get { return m_BrandLabel; }
             set { m_BrandLabel = value; }
          }
     
          [Association(Storage="m_Article")]
          public EntitySet<Article> Article
          {
             get { return m_Article; }
             set { m_Article = value; }
          }
       }
    Mon DataContext fortement typé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       class Db : DataContext
       {
          public Table<Brand> brand;
          public Table<Article> article;
     
          public Db(string connection) : base(connection) {}
       }
    Comment je fais pour ajouter un enregistrement dans Article et dans Brand ?

    Dans tous les tutos que je lis ça donne un truc du style :
    - db.article.Add()
    - db.brand.Add()

    Sauf que je n'ai pas ces méthodes Add().
    Au mieux j'ai db.brand.Article.Add() mais pour la table Article alors ?

    ps : j'ai bien essayé avec ma classe générée par SqlMetal mais comme j'avais la même chose, j'ai voulu réecrire la classe au plus simple.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ah, mea culpa.

    Il se peut que j'ai la réponse ici

    Je teste ce soir et je tag "Résolu" si ça marche

    Logique, ça permet de bien spécifier que c'est effectif sur le SubmitChanges()

  3. #3
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    En fait, la classe Table<TEntity> avait une méthode Add dans la beta du framework 3.5, mais dans la version finale ça a été remplacé par InsertOnSubmit
    http://msdn2.microsoft.com/fr-fr/net.../bb763516.aspx

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Pour ajouter tu ne dois pas plutôt créer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Article a1 = new Article();
    puis faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    db.article.InsertOnSubmit( a1 );
    db.SubmitChanges();

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ok merci à tous

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Réouverture du sujet

    3 questions concernant la bonne méthode à utiliser pour travailler avec LinQ


    1/ En Ado.net j'avais l'habitude de retourner l'id de l'enregistrement ajouté, avec LinQ pour faire cela, est ce que c'est la bonne solution que de prendre <mon_objet>.<mon_champ_id> (solution qui fonctionne sans soucis) après le SubmitChanges ? Ou bien y a t'il une méthode/propriété plus framework compliant ?

    2/ Pour reprendre mon contexte ci-dessus, si je veux mettre à jour un champ je peux faire (tested and approuved)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Brand brand = new Brand();
    brand.BrandId = 1;
     
    Brand q = (from b in db.brand
                where b == brand
                select b).Single();
     
    q.BrandLabel = "blablabla";
    Encore une fois, est ce la bonne façon de faire ? J'en déduis que quand je fais where b == brand, il fait une comparaison sur la clé primaire ?

    3/ Mon objet Brand contient donc une collection d'objet Article, si je veux ajouter un objet Article avec un nouvel objet Brand, dois je procéder en 2 étapes ? Ajouter Brand puis Article en lui passant l'id de l'objet Brand aini créer ? Ou bien LinQ me permet de faire ça d'un coup (je ne sais comment)


    Merci

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    1) Oui, ça me semble être une bonne solution.

    2) Oui, par contre te compare tout l'objet et pas seulement la clé primaire (enfin je crois)... Il faudrait plutôt faire qqc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where b.Id == brand.BrandId
    3) Tu devras bien insérer ton objet Brand puis ton objet Article.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Points : 165
    Points
    165
    Par défaut
    Ok merci.

    En revanche pour je pensais comme toi mais j'ai fais un test avec une valeur fausse pour l'un des champs, il retrouve quand même mon record du moment que la clé primaire est bonne.

    Mais bon je reste sur la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where b.BrandId == brand.BrandId
    comme ça au moins c'est plus explicite et pas de coup tordu.

    Merci beaucoup

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Ok merci pour l'info J'avais jamais testé.

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

Discussions similaires

  1. [LINQ TO SQL] ajout attributs à des classes avec le concepteur
    Par sdicay dans le forum Framework .NET
    Réponses: 0
    Dernier message: 09/03/2010, 21h37
  2. LINQ to SQL] Ajouter un élément dans une IQueryable
    Par annalady dans le forum Accès aux données
    Réponses: 3
    Dernier message: 08/07/2008, 11h49
  3. [C#][Linq to Sql] Ajout de données ?
    Par dinbougre dans le forum Linq
    Réponses: 8
    Dernier message: 10/03/2008, 14h48
  4. [Linq to SQL] Ajouter des methodes aux entity
    Par anthyme dans le forum Accès aux données
    Réponses: 2
    Dernier message: 22/02/2008, 21h34
  5. [SQL] Ajout de données et Mise à jour d'une table
    Par wonga dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 31/07/2007, 17h01

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