我有一个功能,我可以添加文章,用户可以评论它们。这是通过一对多关系完成的,例如= "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"
之类的列。
绩效视角最擅长什么?
我理解潜在的问题,我只是想知道哪种解决方案最有效。
答案 0 :(得分:3)
你问的是两个不同的问题。
首先,如果评论只能用于一篇文章,那么从数据库设计的角度来看,在ArticleId
表中使用Comment
而不是创建链接表会更有意义。中间链接表通常仅用于许多:许多关系,因为它们无法显式建模并且需要该级别的间接。
话虽如此,如果您正确定义了外键,那么Linq2SQL将检测它们并允许您使用对象而不是键(或者您可以使用它们)。例如,您的最后一行可能是这样的,假设您按原样离开了数据库设计:
comment.Articles.Add(new CommentsForArticle() { ArticleId = articleId, Comment = comment }
请注意,我使用的是实际的Comment
对象而不是ID。这样做,Linq2SQL可以自动为您进行映射。如果您有实际文章的句柄,则可以将ArticleId = articleID
替换为Article = article
。