2013-03-25 72 views
1

我有SurveyHasManyQuestionHasManyOption
我想创建从OptionSurvey的参考。
的问题是,每次我想创建一个所有孩子的new Survey,我需要在所有survey.Questions环上的所有survey.Questions.Options循环,并设置o每个OptionSurvey(或者NHibernate的会为每个Option创建new Survey
**我不想有IList<Option>的调查,如果我这样做,它会解决这个问题,但它是沉重的,无法使用**流利Nhibernate - 只从儿童方参考

public class SurveyMap : ClassMap<Survey> 
    { 
     public SurveyMap() 
     { 
      Id(x => x.Id).GeneratedBy.Identity(); 
      HasMany(x => x.Questions).KeyColumn("SurveyId").Inverse().AsBag().Not.LazyLoad().Cascade.SaveUpdate(); 
     } 
    } 

    public class QuestionMap : ClassMap<Question> 
    { 
     public QuestionMap() 
     { 
      Id(x => x.Id).GeneratedBy.Identity(); 
      HasMany(x => x.Options).KeyColumn("QuestionId").Inverse().AsBag().Cascade.SaveUpdate(); 
     } 
    } 

    public class OptionMap : ClassMap<Option> 
    { 
     public OptionMap() 
     { 
      Id(x => x.Id).GeneratedBy.Identity(); 
      References(x => x.Survey).Column("SurveyId").Cascade.All(); 
     } 
    } 
+0

为什么你需要参考调查选项?为什么不反引用问题哪个反向引用调查?你已经在集合映射上定义了反函数,所以我假设你已经有了反向引用 – Firo 2013-03-28 06:34:07

+0

@Firo - 我添加了这个引用来最小化其他用法的连接查询。像外部报告系统。由于'Survey'包含'IList ',这意味着该问题被映射到'Survey',所以问题被映射到'Survey',但我希望Option也具有该连接。谢谢! – SexyMF 2013-03-28 18:00:14

回答

1

它可能是更好地从你的应用程序分开你的报告关注业务逻辑关注。使用您已经拥有的用于应用程序业务逻辑的映射,并根据您的报告要求为数据提供不同的界面。你可以使用HQL,SQL或新的对象和地图。