2015-09-02 69 views
0

有班級書籍,在那裏我應該實現兩個外部表格。評論和評級。這是類:已經定義了名爲X的成員c#model

public class Books 
    { 

     public Books() 
     { 
      CommentsList = new List<Comments>(); 
     } 

     public Books() 
     { 
      RatingList = new List<Rating>(); 
     } 

     public virtual int Id { get; set; } 
     public virtual string Title { get; set; } 

     public virtual string Category { get; set; } 

     public virtual string ISBN { get; set; } 

     public virtual string Description { get; set; } 

     public virtual string Image { get; set; } 

     // public virtual int CategoryId { get; set; } 

     public virtual Categories Categories { get; set; } 

     public virtual IList<Comments> CommentsList { get; set; } 
     public virtual IList<Rating> RatingList { get; set; } 

     public virtual void AddComment(Comments comm) 
     { 
      comm.Books = this; 
      CommentsList.Add(comm); 
     } 

     public virtual void AddRating(Rating rating) 
     { 
      rating.Books = this; 
      RatingList.Add(rating); 
     } 


    } 

它給出了一個錯誤

錯誤2已經定義了一個名爲「圖書」與同 參數類型

成員如何解決這個問題有是否有可能爲一本書添加評論和評分?

+2

因爲你有兩個構造函數,其是完全一樣的! – Arash

+0

如果你需要兩個forgin鍵你爲什麼不把它們放在一個構造函數中 – Arash

+0

出於好奇,爲什麼你的所有屬性都是虛擬的?如果你正在使用實體框架,那麼只有導航屬性需要是'虛擬'('public virtual Categories Categories {get; set;}','public virtual ICollection CommentsList {get; set;},等等)。 – JimmyBoh

回答

4

你有兩個相同的構造函數。我猜你在使用實體框架,如果我沒有記錯,你想要將這些IList s更改爲ICollection s,以使用實體框架延遲加載功能。

變化

public class Books 
{ 

    public Books() 
    { 
     CommentsList = new List<Comments>(); 
    } 

    public Books() 
    { 
     RatingList = new List<Rating>(); 
    } 
} 

要:

public class Books 
{ 
    public Books() 
    { 
     CommentsList = new List<Comments>(); 
     RatingList = new List<Rating>(); 
    } 
} 
+0

所以整個代碼將是: '公共類書籍 { 公共圖書(){ CommentsList =新名單(); RatingList =新列表(); } }' '然後,添加註釋將是: 公共虛擬無效AddComment(評論COMM) { comm.Books =此; CommentsList.Add(comm); }' 而對於評價: '公共虛擬無效AddRating(評分等級) { rating.Books =此; RatingList.Add(rating); }' 所以當必須添加評級時,使用AddRating等? – LoverBugs

+0

我不知道NHibernate,但是,我認爲這是正確的。你有沒有得到它的工作? – Thijs

2

你根本不可能有具有相同簽名的兩個構造。您應該考慮使用a builder pattern

您通常會隱藏構造函數(使它們變爲私有),而不是暴露靜態方法,如CreateFromCommentsCreateFromRatings

private Books() { } 

public static Books CreateFromComments() 
{ 
    var ret = new Books(); 
    ret.CommentsList = new List<Comments>(); 
    return ret; 
} 

public static Books CreateFromRatings() 
{ 
    var ret = new Books(); 
    ret.RatingsList = new List<Ratings>(); 
    return ret; 
} 
+0

有些幫助?例子? – LoverBugs

+0

儘管這是一個非常有用的設計模式,但我認爲它不適合@dongou。 – JimmyBoh

+0

@JimmyBoh - ...因爲...? –

0

可能是你可以傳遞一個布爾參數去設置列表來初始化...

public Books(bool comments) 
    { 
     if (comments) 
      CommentsList = new List<Comments>(); 
     else 
      RatingList = new List<Rating>(); 
    } 
相關問題