2016-06-28 33 views
0

我有2個實體,一切工作正常,除了NHibernate不會加載對象上的第二個實體的FieldGroupItems屬性。 我懷疑這是因爲這兩個實體之間存在循環依賴關係。 我真的需要ChildGroups和FieldGroupItems。如果我刪除ChildGroups比FieldGroupItems加載正常。 有沒有辦法讓我想要什麼。我能想到的唯一方法是使用Guid集合而不是對象集合來僅存儲Ids並從代碼手動獲取數據。 任何幫助表示讚賞。流利的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來映射您的實體,這應該工作。只要注意Cascade選項。

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(); 
     } 
}