2010-04-19 62 views
1

我有一個功能,可以添加文章並且用戶可以對它們進行評論。這是通過一對多關係完成的,如= "commentId=>ArticleId"。但是,當我嘗試在添加一對多記錄的同時將註釋添加到數據庫時,commentId未知。像這樣的代碼:Linq-to-sql一次添加項目和一對多記錄

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。有沒有什麼辦法可以在兩者之間不必提交,或者我只需要刪除我擁有一對多關係的部分,只需使用帶有"ArticleId"列的CommentTable即可。

從性能的角度看什麼是最好的?

我瞭解底層問題,我只是想知道哪種解決方案效果最好。

回答

3

你在問兩個不同的問題。

首先,如果評論只能針對一篇文章,那麼從數據庫設計的角度來看,在Comment表中有ArticleId而不是創建鏈接表更有意義。中間鏈接表通常僅用於許多關係,因爲它們不能被顯式建模,並且需要這種間接級別。這就是說,如果你有正確定義的外鍵,那麼Linq2SQL將檢測到它們並允許你使用對象而不是鍵(或者你可以使用)。例如,你的最後一行可能是這樣的,假設你離開你的數據庫設計-是:

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

請注意,我用實際Comment對象,而不是它的ID。這樣做,Linq2SQL可以自動爲你做這個映射。如果您有實際文章的句柄,則可以用Article = article替代ArticleId = articleID

+0

謝謝,你回答了我的問題:) – 2010-04-19 18:37:52