2010-10-23 13 views
0

Wierd question title ...linq to sql datacontext, en insérant des objets et en récupérant l'identifiant et en l'ajoutant à une autre table?

Ce que j'essaie d'accomplir est assez simple je pense.

J'ai eu 3 tables dans la base de données,

BlogPost - BlogPostTagsConnection - Mots

Le blogpost contient du texte, le titre, limace, auteur, id etc. BlogPostTagsConnection contient le BlogPost id et les tags id et enfin les tags contient tagid et tag.

donc j'ai essayé de comprendre comment insérer un nouveau record (et éventuellement mettre à jour un):

public void Create(BlogPost post) 
{ 
    DB db = new DB(); 
    var matchingTags = from data in db.Tags 
           where (from tagsInPost in post.Tags select tagsInPost.TagName).Contains(data.Tag) 
           select new Tag() {TagId = data.TagID, TagName = data.Tag}; 

    var post2 = new DataBlogPost 
          { 
           Title = post.Title, 
           Text = post.Text, 
           Slug = post.Slug, 
           ShortDescription = post.ShortDescription, 
           Published = post.Published, 
           Author = post.Author 
          }; 
    db.DataBlogPosts.InsertOnSubmit(post2); 
    ... <- insert the tags and retrieve the id from the tags and the blogpost 
    ... <- insert the ids from the tags and blogposts to the blogpoststagsconnection table 
    db.SubmitChanges(); 
} 

d'abord, je reçois toutes les balises de la base de données correspondant aux balises que je l'ai écrit dans mon blogpost. Les tags sont enregistrés dans une liste avec des tags {TagID, Tag}.

Ensuite, j'insère mon nouveau message dans la base de données (post2). Après cela, j'ai besoin d'insérer tous les tags (que j'ai créés avec mon blog), donc si je l'ai écrit dans la balise tags "tag1 tag2 tag3 tag4" et que ma base de données contient déjà tag1 et tag2, elle devrait alors créer 2 nouveaux enregistrements, un pour tag3 et un pour tag4.

J'ai alors besoin d'obtenir l'id du blogpost généré en quelque sorte et aussi l'id de tag3 et tag4 pour pouvoir les insérer dans BlogPostTagsConnection.

Mais comment récupérer l'ID? ou existe-t-il un moyen plus simple de gérer ces inserts?

Répondre

2

Oui, si vos relations FK sont correctement configurées et les tables correctement importées sur votre surface DBML, votre DataBlogPost aura une propriété BlogPostTagsConnections (ou similaire) que vous pouvez remplir avec new (ou existant, tiré du même DataContext) BlogPostTagsConnection instances.

De même BlogPostTagsConnection aura une propriété Tags que vous pouvez remplir. Lorsque vous avez terminé, insérez DataBlogPost et toutes les données relationnelles seront également enregistrées. Pas besoin de s'inquiéter des ID, il suffit d'ajouter des instances existantes ou nouvelles à ces propriétés "relationnelles".

1

dépensier est juste,

et des informations supplémentaires sur la façon de récupérer l'ID d'entité inséré:

Après avoir inséré l'entité, il suffit de lire la propriété ID pour cette entité, il sera rempli.