我在用户和调查之间有很多关系,这种关系是双向的,所以在为users
列表添加新调查时,我需要这样做:
foreach(User user in users)
{
survey.Users.Add(user);
user.Survey.Add(survey);
}
通过所有用户进行迭代看起来有点过分,因为可能有很多用户。
有没有更好的方法? 是否有可能有多方向的单向?
答案 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);
}
}