2013-03-25 3 views
1

나는 그 HasManyQuestionHasManyOption입니다.
Option에서 Survey까지 참조를 만들고 싶습니다.
문제는 내가 모든 자식과 함께 new Survey를 만들 때마다, 나는 Survey (또는 다른 NHibernate에 각 Option에 대한 new Survey을 생성 할 모든 survey.Questions.Options의 모든 survey.Questions 및 루프에 루프가 필요하고 각 Option O를 설정하는 것이있다)
** 내가이 문제를 해결할 것이라고한다면 설문 조사에 IList<Option>을 갖고 싶어 해달라고하지만 무겁고 ** 사용할 수 없게 될 것Fluent 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

왜 옵션에 대한 설문 조사가 필요합니까? 역 참조하지 않는 이유 설문 조사에 대한 질문? 당신은 이미 컬렉션 매핑에 inverse를 정의 했으므로 이미 backreferences를 가지고 있다고 가정합니다. – Firo

+0

@Firo -이 참조를 추가하여 다른 용도의 조인 쿼리를 최소화합니다. 외부보고 시스템처럼. 'Survey'에는'IList '이 들어 있기 때문에 Question이'Survey'에 매핑되어 있으므로 Question이'Survey'에 맵핑되지만, Option도 그 연결을 원합니다. 감사! – SexyMF

답변

1

응용 프로그램에서보고 문제를 분리하는 것이 좋습니다 수 있습니다 비즈니스 로직에 대한 우려. 응용 프로그램 비즈니스 논리에 대해 이미 가지고있는 매핑을 사용하고보고 요구 사항을 위해 데이터에 다른 인터페이스를 제공하십시오. 이것을 위해 HQL, SQL 또는 새로운 객체와 맵을 사용할 수 있습니다.