2013-10-23 47 views
0

我在我的項目中有以下情況,我開始有幾個關於它的問題。兩個具有常見一對多關係的實體

User類,查詢QuestionFollows直接會更好(在性能方面)不是查詢Questions然後QuestionFollows

另一個問題...... UserQuestionFollow必要/ redudant之間的關係?你正在做

public class User 
{ 
    public long UserID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Question>  Questions  { get; set; } 
    public virtual ICollection<QuestionFollow> QuestionFollows { get; set; } 
} 

public class Question 
{ 
    public long QuestionID { get; set; } 
    public long UserID  { get; set; } 
    public string Description { get; set; } 
    public User User  { get; set; } 

    public virtual ICollection<QuestionFollow> QuestionFollows { get; set; } 
} 

public class QuestionFollow 
{ 
    public long  QuestionFollowID { get; set; } 
    public long  QuestionID  { get; set; } 
    public long  UserID   { get; set; } 
    public DateTime Date    { get; set; } 
    public Question Question   { get; set; } 
    public User  User    { get; set; } 
}   

+1

查詢QuestionFollows在用戶不會給你相同的行查詢問題然後QuestionFollows。 QuestionFollows on User就像'User.Questions.SelectMany(x => x.QuestionFollows)'。在這種情況下,直接在User上的QuestionFollow比Select many選項具有更好的性能 –

回答

1

一切似乎是正確的假設爲基礎的,我從你的代碼收集:用戶有問題,也可以按照屬於其他用戶的問題。如果這是正確的,那麼看起來你只是在與這些關係如何發揮而掙扎。

User,查詢Questions將返回屬於該User實例的所有問題。查詢QuestionFollows,但是,將返回User選擇遵循,這些問題是否不屬於該User實例所有問題。換句話說,這是兩個功能不同的數據集,所以它不關於哪個更高性能;它關於哪個返回您實際需要的數據。

UserQuestionFollows之間的關係也不是多餘的,因爲您再次追蹤關係的根本不同方面。在QuestionFollowUser是以下的問題是實體和Question是被跟蹤的實體。這Question實體可以連有一個完全不同的User,爲User實體是誰擁有的問題之一。

相關問題