两个具有共同一对多关系的实体

时间:2013-10-23 18:50:46

标签: asp.net-mvc entity-framework entity-relationship

我的项目中有以下场景,我开始对它提出一些问题。

User课程中,直接查询QuestionFollows会比查询Questions然后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 个答案:

答案 0 :(得分:1)

您所做的一切似乎都是基于我从您的代码中收集的假设:用户有疑问,也可以关注属于其他用户的问题。如果这是正确的,那么看起来你只是在努力解决这些关系如何发挥作用。

User开始,查询Questions将返回属于该User个实例的所有问题。但是,查询QuestionFollows将返回User选择关注的所有问题,这些问题是否属于User实例。换句话说,这些是两个功能不同的数据集,所以它不是关于哪个更具性能;它是关于哪个返回你实际需要的数据。

UserQuestionFollows之间的关系也不是多余的,因为您再次追踪这种关系的根本不同方面。在QuestionFollow中,User跟随问题的实体,Question是正在关注的实体。 Question实体可能会有一个完全不同的User,因为User实体是拥有问题的实体。