2012-04-24 82 views
0

我有一個關於實現實體代碼第一個到多個分貝的基本問題。我有兩個型號,文章和評論是這樣的:實體一對多Db

public class Article 
    { 
    public int Id { get; set; } 

    public virtual ICollection<Comment> Comments { get; set; } 
.... 

public class Comment 
{ 
    public int Id { get; set; } 

    public virtual Article CommentForArticle { get; set; } 

    public DateTime TimeStamp { get; set; 
.... 

如果我嘗試添加註釋到數據庫(含該文章的Comment.CommentForArticle)的註釋被添加到數據庫,但製品不含有評論中收集的評論。

但是,如果我創建註釋,並將其添加到文章的一切工作正常。我不必將評論添加到數據庫中,它會自動添加(我猜。)

我在嘗試實現此問題後出現問題(錯誤類似:違反了多重性約束)所以我的問題是,上午我現在這樣做是正確的,爲什麼你必須這樣做,而不是將評論添加到Db中,而是添加到包含評論的文章中。你能分享任何鏈接,以幫助我更好地理解實體框架如何與一對多和多對多的關係共同工作。

感謝, 加勒特

+1

兩種方式都應該有效,但是如果沒有看到您使用的實際代碼,很難說出發生了什麼。 – 2012-04-24 04:27:42

+0

這就是我的想法,我不知道什麼是最初的錯誤,我做了這樣的其他項目,從來沒有問題。唯一的區別是這個項目使用了不同版本的實體框架,然後是我以前做過的。 (不知道什麼版本導致我不在工作。) – 2012-04-24 04:35:47

回答

1

我寧願增加新項目業主的集合,如果有一個「有」關係。在你的情況,ArticleComment S,所以我想補充一個新的註釋article.Comments。

的「是」 relationsip,不是繼承等,也是可能的。假設你有ArticleType個實體和一個屬性article.ArticleType。在這種情況下,我寧願設置屬性。我甚至不喜歡ArticleType有一個Articles導航屬性。

在的情況下,「純」多到多(即,當連接表沒有被映射爲它自己的實體類型)沒有其他選擇,將項目添加到所有者的集合。

目前尚不清楚爲什麼你的問題後有問題。是因爲你混合了兩種方法嗎? (添加註釋到數據庫並添加相同的評論文章)。

作爲參照:一個偉大的系列文章開始here。它側重於更復雜的情況,但對常規情況的引用不難找到。

+0

我不知道爲什麼我一直存在這麼多問題,但最終我確實混合了這兩種方法,我認爲這是當我得到「違反多重約束」錯誤。謝謝,我想我現在對它有很好的把握。 – 2012-04-25 05:46:27