2013-07-09 29 views
0

我正在使用實體框架5與SQL Server 2012數據庫和以下類結構。有五個層次結構:我可以在LINQ和SQL Server 2012後端中合理地使用.include包含五個級別嗎?

主題>主題>子話題>事實>答案

我需要的是能夠得到事實與他們的答案沿對象名單時SubjectId是給我。我的關注點在於性能以及我可以使用LINQ Query進行多深。

這裏是類:

public partial class Subject { 
    public Subject() { this.Topics = new List<Topic>(); } 
    public int SubjectId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Topic> Topics { get; set; } 
} 
public partial class Topic { 
    public Topic() { this.SubTopics = new List<SubTopic>(); } 
    public int TopicId { get; set; } 
    public string Name { get; set; } 
    public int SubjectId { get; set; } 
    public virtual Subject Subject { get; set; } 
    public virtual ICollection<SubTopic> SubTopics { get; set; } 
} 
public partial class SubTopic {  
    public SubTopic() { this.Facts = new List<Fact>(); } 
    public int SubTopicId { get; set; } 
    public string Name { get; set; } 
    public int TopicId { get; set; } 
    public virtual Topic Topic { get; set; } 
    public virtual ICollection<Fact> Facts { get; set; }  
} 
public class Fact { 
    public Fact() { this.Answers = new List<Answer>(); }  
    public int FactId { get; set; } 
    public int FactStatusId { get; set; } 
    public string Title { get; set; } 
    public int SubTopicId { get; set; } 
    public virtual SubTopic SubTopic { get; set; } 
    public virtual ICollection<Answer> Answers { get; set; } 
} 

直到現在我所有的LINQ查詢被簡單。例如,下面是我用得到事實的查詢時,我知道subTopicId:

 var facts = _factsRepository.GetAll() 
      .Where(a => a.SubTopicId == subTopicId) 
      .Include(a => a.Answers) 
      .ToList(); 

現在我有一個新的要求,我不知道怎麼去,我需要的數據。我需要的是獲取屬於給定SubjectId的事實和答案列表。

我希望對此提供一些示例代碼的建議和希望。我應該做如下的事情:

 var facts = _subjectsRepository.GetAll() 
      .Where(a => a.SubjectId == subjectId) 

然後做一些long.Include列表,包括主題,副主題,事實和最後的答案?請注意,數據由管理員使用,因此雖然我需要將數據快速恢復,但不需要以極快的速度返回給我。

請注意,在不久的將來,我們希望開始使用EF6和SQL Server 2014預覽版。我想知道是否有人知道這些可能帶來的功能,這有助於我們在這種情況下獲取數據。

+0

你可以,它會很快。嘗試一下,衡量一下,如果它對你的需求很慢,那就試着分兩次或多次查詢。 –

+0

你能告訴我如何編碼.Include。如果你能把這幾行寫成答案,我可以接受並嘗試一下。我只是不確定如何執行包含。我是否一個接一個地鏈接? – Alan2

回答

1

如果你只想要Fact實體和Answer實體,那麼沒有點返回TopicSubtopic實體。而不是獲得Subject實體,並與包含深入5級。像下面的東西可能會做。

var query = context.Facts 
        .Where(f => f.Subtopic.Topic.SubjectId == mySubjectId) 
        .Include(f => f.Answers); 
相關問題