多对多单向

时间:2013-01-21 11:57:42

标签: nhibernate fluent-nhibernate many-to-many

我在用户和调查之间有很多关系,这种关系是双向的,所以在为users列表添加新调查时,我需要这样做:

foreach(User user in users)
{
    survey.Users.Add(user);
    user.Survey.Add(survey);
}

通过所有用户进行迭代看起来有点过分,因为可能有很多用户。

有没有更好的方法? 是否有可能有多方向的单向?

2 个答案:

答案 0 :(得分:1)

啊,你的问题是你的数据库设计。如果没有分解,多对多关系将导致你这样的重大头痛:)。

解决方案:创建一个名为UserSurvey的新表,其中包含主键,然后是UserID字段和SurveyID字段,如下所示:

----------------------------------------
| UserSurveyID | PrimaryKey            |
| UserID       | Foreign Key to User   |
| SurveyID     | Foreign key to Survey |
----------------------------------------

然后您需要做的就是查询该表以了解您的需求。

我还要做的就是在nHibernate UserSurvey类中,放置实际的User属性和Survey属性,以便在拥有UserSurvey后为您节省额外的查询对象。

答案 1 :(得分:0)

是的,您可以拥有单向多对多。要实现这一目标,你没有什么特别的,只是不要映射关系的另一面。

如果您需要维护关系的内存中表示,那么您需要在执行时向关系的两端添加引用。这不是矫枉过正,您必须将一组用户与调查相关联,因此在某些时候您必须遍历该组用户并进行该关联。

如果您想避免加载调查的用户集,可以在访问之前检查集合是否已初始化:

foreach(User user in users)
{
    user.Survey.Add(survey);
    if (NHibernateUtil.IsInitialized(survey.Users)
    {
        survey.Users.Add(user);
    }
}