2010-04-19 11 views
1

J'ai une fonction où je peux ajouter des articles et les utilisateurs peuvent les commenter. Ceci est fait avec une relation de un à plusieurs comme = "commentId=>ArticleId". Cependant, lorsque j'essaie d'ajouter le commentaire à la base de données en même temps que j'ajoute l'enregistrement un à plusieurs, le commentaire n'est pas connu. Comme ce code:Linq-to-sql Ajouter un article et un enregistrement un-à-plusieurs à la fois

Comment comment = new Comment(); 
comment.Date = DateTime.UtcNow; 
comment.Text = text; 
comment.UserId = userId; 
db.Comments.InsertOnSubmit(comment); 
comment.Articles.Add(new CommentsForArticle() { ArticleId = articleId, CommentId = comment.CommentId }); 

Le commentId sera de 0 avant de soumettre presse. Est-il possible de ne pas avoir à soumettre entre les deux ou dois-je simplement couper la partie où j'ai une relation un-à-plusieurs et juste utiliser un CommentTable avec une colonne comme .

Qu'est-ce qui est le meilleur dans une perspective de performance? Je comprends le problème sous-jacent, je veux juste savoir quelle solution fonctionne le mieux.

Répondre

3

Vous posez deux questions différentes. Tout d'abord, si un commentaire ne peut être que pour un article, il est beaucoup plus logique, du point de vue de la conception de base de données, d'avoir ArticleId dans la table Comment plutôt que de créer une table de liens. Une table de liens intermédiaire est généralement utilisée uniquement pour de nombreuses relations, car elles ne peuvent pas être modélisées explicitement et ont besoin de ce niveau d'indirection. Cela étant dit, si vous avez défini correctement vos clés étrangères, Linq2SQL les détectera et vous permettra de travailler avec des objets plutôt qu'avec des clés (ou vous pouvez utiliser l'une ou l'autre). Par exemple, votre dernière ligne pourrait être quelque chose comme ça, en supposant laissé la conception de votre base de données-est:

comment.Articles.Add(new CommentsForArticle() { ArticleId = articleId, Comment = comment } 

Notez que j'utilise le Comment réel objet plutôt que son numéro d'identification. De cette façon, Linq2SQL peut automatiquement faire ce mapping pour vous. Si vous avez une poignée à l'article réel, vous pouvez remplacer ArticleId = articleID avec Article = article ainsi.

+0

Merci, vous avez répondu à ma question :) –