2013-05-03 74 views
2

我有一個新聞實體,並根據他們的NewsID獲取新聞。現在我定義了一個新實體,一個Group,並且我想根據他們的Group ID得到這個消息。我定義了一個組新聞表格Aslo將它與表格聯繫起來。 enter image description here實體框架工作:多對多關係表

新聞模型我有:

public virtual ICollection<GroupNews> RelatedGroupID { get; set; } 

所以我認爲我所定義的GroupNews表值,我可以在NewsService使用它。

現在讓我們看看NewsService:

Expression<Func<News, bool>> constraint = null; 

    if (user_id > 0 && project_id > 0) 
    { 
     constraint = e => (e.CreatorID == user_id && e.RelatedProjectTags.Any(p => p.ProjectID == project_id)); 
    } 
    else if (user_id > 0) 
    { 
     constraint = e => (e.CreatorID == user_id); 
    } 
    else if (project_id > 0) 
    { 
     constraint = e => (e.RelatedProjectTags.Any(p => p.ProjectID == project_id)); 
    } 

    else 
    { 
     constraint = null; 
    } 

    IEnumerable<News> result_list = null; 

    if (constraint != null) 
    { 
     result_list = newsRepository.GetMany(constraint).OrderByDescending(e => e.CreatedOn).Skip(offset); 
    } 
    else 
    { 
     result_list = newsRepository.GetAll().OrderByDescending(e => e.CreatedOn).Skip(offset); 
    } 

    if (count > 0) 
    { 
     result_list = result_list.Take(count); 
    } 

    return result_list.ToList<News>(); 
} 

}

我爲了定義基於羣ID約束這一行添加到它。

else if (groupId > 0) 
    { 
     constraint = e => (e.RelatedGroupID.Any(n => n.GroupID == groupId)); 
    } 

似乎錯了,給我這個錯誤:{ 「無效的對象名稱dbo.GroupNewsNews'」}

+0

如果你在做Code First,你爲什麼不讓EF爲你生成數據庫。無需手動創建/更改數據庫表。 – jure 2013-05-03 08:52:35

+0

請發佈您的GroupNews和News類以及您的上下文類。 – SOfanatic 2013-05-03 12:04:29

+1

根據您的屏幕截圖和錯誤消息,您的表格名爲GroupNews,但EF正在嘗試查找「GroupNewsNews」。您可能需要覆蓋表名:'[Table [「GroupNews」)]' – SOfanatic 2013-05-03 12:14:48

回答

5

1.You不需要GroupNewsID在GroupNews表。您需要刪除此列中的 並通過GroupID和NewsID創建複雜鍵。在 您需要的新聞實體定義屬性:

public virtual ICollection<Group> Groups 
    { 
     get; 
     set; 
    } 

在這個實體需要初始化屬性的默認構造函數(需要延遲加載):

Groups = new List<Group>(); 

對集團實體類似的變化。

2.In您需要定義

this.HasMany(t => t.News) 
    .WithMany(t => t.Groups) 
    .Map(m => 
     { 
      m.ToTable("GroupNews"); 
      m.MapLeftKey("GroupID"); 
      m.MapRightKey("NewsID"); 
     }); 

3.Write試驗NewsRepository和GroupRepository的GroupMap.cs。

+0

但是GroupNews表的主鍵是什麼? – matarsak 2013-05-03 14:13:45

+1

兩個外鍵「GroupID」和「NewsID」的組合將成爲主鍵。 – 2013-05-03 17:03:18

+0

當我添加新消息時,我如何將相關的groupID和newsID添加到GroupNews Table? – matarsak 2013-05-08 12:22:11