Linq-to-sql一次添加项目和一对多记录

时间:2010-04-19 18:22:39

标签: c# performance linq-to-sql one-to-many

我有一个功能,我可以添加文章,用户可以评论它们。这是通过一对多关系完成的,例如= "commentId=>ArticleId"。但是当我尝试在添加一对多记录的同时将注释添加到数据库时,commentId是未知的。喜欢这段代码:

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 });

在我按提交前,commentId将为0。有什么方法可以不必在两者之间提交,或者我只需要删除我有一对多关系的部分,只需使用CommentTable"ArticleId"之类的列。

绩效视角最擅长什么?

我理解潜在的问题,我只是想知道哪种解决方案最有效。

1 个答案:

答案 0 :(得分:3)

你问的是两个不同的问题。

首先,如果评论只能用于一篇文章,那么从数据库设计的角度来看,在ArticleId表中使用Comment而不是创建链接表会更有意义。中间链接表通常仅用于许多:许多关系,因为它们无法显式建模并且需要该级别的间接。

话虽如此,如果您正确定义了外键,那么Linq2SQL将检测它们并允许您使用对象而不是键(或者您可以使用它们)。例如,您的最后一行可能是这样的,假设您按原样离开了数据库设计:

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

请注意,我使用的是实际的Comment对象而不是ID。这样做,Linq2SQL可以自动为您进行映射。如果您有实际文章的句柄,则可以将ArticleId = articleID替换为Article = article