流利的nhibernate循环依赖

时间:2016-06-28 16:15:48

标签: c# .net nhibernate fluent-nhibernate

我有2个实体,一切正常,但NHibernate不会在对象的第二个实体中加载FieldGroupItems属性。 我怀疑它是因为2个实体之间存在循环依赖关系。 我真的需要ChildGroups和FieldGroupItems。如果我删除ChildGroups比FieldGroupItems加载好。 有没有办法得到我想要的东西。我能想到的唯一方法是使用Guid集合而不是对象集合来仅存储ID并从代码中手动获取数据。 任何帮助表示赞赏。

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

1 个答案:

答案 0 :(得分: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();
        }
}       
相关问题