我正在使用實體框架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預覽版。我想知道是否有人知道這些可能帶來的功能,這有助於我們在這種情況下獲取數據。
你可以,它會很快。嘗試一下,衡量一下,如果它對你的需求很慢,那就試着分兩次或多次查詢。 –
你能告訴我如何編碼.Include。如果你能把這幾行寫成答案,我可以接受並嘗試一下。我只是不確定如何執行包含。我是否一個接一個地鏈接? – Alan2