代码之家  ›  专栏  ›  技术社区  ›  Oskar Kjellin

linq to sql一次添加项和一对多记录

  •  1
  • Oskar Kjellin  · 技术社区  · 14 年前

    我有一个功能,我可以添加文章和用户可以评论他们。这是通过一对多的关系完成的,比如= "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 回复  |  直到 14 年前
        1
  •  3
  •   Adam Robinson    14 年前

    你在问两个不同的问题。

    首先,如果注释只能用于一篇文章,那么从数据库设计的角度来看 ArticleId Comment 表而不是创建链接表。中间链接表通常只用于许多:许多关系,因为它们不能被显式地建模并且需要这种级别的间接寻址。

    也就是说,如果您正确定义了外键,那么linq2sql将检测它们并允许您使用对象而不是键(或者您可以使用两者之一)。例如,假设您保持数据库设计原样,最后一行可能是这样的:

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

    注意我用的是 评论 对象而不是它的id。这样做,linq2sql可以自动为您进行映射。如果你有实际文章的句柄,你可以替换 ArticleId = articleID 具有 Article = article 也。