2016-06-28 15 views
0

2つのエンティティがあり、NHibernateがオブジェクトの2番目のエンティティのFieldGroupItemsプロパティをロードしない限り、すべて正常に動作します。 私は2つのエンティティの間に循環依存があるからだと思います。 私は本当にChildGroupsとFieldGroupItemの両方が必要です。 FieldGroupItemsよりもChildGroupsを削除しても問題ありません。 私が望むものを手に入れる方法はありますか?私が考えることができる唯一の方法は、オブジェクトコレクションの代わりにGuidコレクションを使用して、Idからのみを格納し、コードから手動でデータをフェッチすることです。 何か助けていただければ幸いです。流暢なnhibernate循環依存性

public class FieldGroupItemInstance : TenantBaseEntity 
{ 
    public virtual Guid ItemId { get; set; } //ID from the database to update actual object later 
    public virtual bool IsTemporaryId { get; set; } //true if field group is new (doesn't exist in system) 
    public virtual IList<QuestionnaireInstanceField> Fields { get; set; } 
    public virtual IList<QuestionnaireFieldGroupInstance> ChildGroups { get; set; } 

    public FieldGroupItemInstance() 
    { 
     Fields = new List<QuestionnaireInstanceField>(); 
     ChildGroups = new List<QuestionnaireFieldGroupInstance>(); 
    } 
} 

public class QuestionnaireFieldGroupInstance : TenantBaseEntity 
{ 
    public virtual Guid FieldGroupTemplateId { get; set; } 
    public virtual IList<FieldGroupItemInstance> FieldGroupItems { get; set; } //Each repeated group of instances 
    //public virtual FieldGroupItemInstance Parent { get; set; } 

    public QuestionnaireFieldGroupInstance() 
    { 
     FieldGroupItems = new List<FieldGroupItemInstance>(); 
    } 
} 

答えて

0

フルエンティティをマップするためにfluentnhibernateを使用している場合、これは機能するはずです。カスケードオプションに注意してください。

public class FieldGroupItemInstanceMap() 
{ 
     public FieldGroupItemInstanceMap() 
     { 
       Table("FieldGroupItemInstance"); 

       HasManyToMany(x => x.ChildGroups) 
         .Table("FieldGroupItemInstance_QuestionnaireFieldGroupInstance") 
         .ParentKeyColumn("IdFieldGroupItemInstance") 
         .ChildKeyColumn("IdQuestionnaireFieldGroupInstance") 
         .Cascade.None(); 
     } 
} 

public class QuestionnaireFieldGroupInstanceMap() 
{ 
     public QuestionnaireFieldGroupInstanceMap() 
     { 
       Table("QuestionnaireFieldGroupInstance"); 

       HasManyToMany(x => x.FieldGroupItems) 
         .Table("FieldGroupItemInstance_QuestionnaireFieldGroupInstance") 
         .ParentKeyColumn("IdQuestionnaireFieldGroupInstance") 
         .ChildKeyColumn("IdFieldGroupItemInstance") 
         .Cascade.None(); 
     } 
}