2013-10-23 3 views
0

프로젝트에 다음과 같은 시나리오가 있는데 몇 가지 질문이 있습니다. User 클래스에 공통적 인 일대 다 관계가있는 두 엔티티

다음 QuestionsQuestionFollows 쿼리보다 QuestionFollows 직접 (성능면에서) 더 좋을 것이다 쿼리?

또 다른 질문은 ... UserQuestionFollow 사이의 관계가 필요/환원제입니까? 당신이하고있는

도메인

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를 쿼리하는 것과 동일한 행을 제공하지 않습니다. User에 대한 QuestionFollows는'User.Questions.SelectMany (x => x.QuestionFollows)'와 유사합니다. 이 경우 사용자가 직접 선택한 QuestionFollows는 select many 옵션보다 성능이 좋습니다. –

답변

1

모든 바로 내가 당신의 코드에서 수집 가정을 기반으로 보인다 : 사용자가 질문을 가지고 있으며, 다른 사용자에 속하는 질문에 따를 수 있습니다. 그것이 맞다면, 당신은 단순히 이러한 관계가 어떻게 작용 하는지를 고민하고있는 것처럼 보입니다.

User에서 Questions을 쿼리하면 해당 User 인스턴스에 속하는 모든 질문이 반환됩니다. 그러나 QuestionFollows을 쿼리하면 User이 선택한 모든 질문 인 이 해당 질문이 User 인스턴스에 속하는지 여부에 관계없이 반환됩니다. 즉, 이들은 기능적으로 서로 다른 두 가지 데이터 세트이므로 어느 것이 더 성능이 좋은지에 대한 것이 아닙니다. 실제로 필요한 데이터를 반환합니다.

UserQuestionFollows 사이의 관계도 다시는 관계의 근본적인 측면을 추적하기 때문에 중복되지 않습니다. QuestionFollow에서 User인 엔터티이고 질문이이고 뒤 따르는 엔터티가 Question입니다. 그 Question 엔터티는 User과 완전히 다른 User 엔티티가 있기 때문에 이라는 소유자가됩니다.

관련 문제