NHibernate HasManyToMany自动化不会在加载时填充列表

时间:2013-04-04 10:17:32

标签: asp.net-mvc-3 nhibernate fluent-nhibernate automapping

我通过AutoMapping设置了多对多关系。现在,保存和更新按预期正常工作,但是当我之后获得实体时,DiscountGroups中没有加载DiscountGroups。我不能为我的生活解决为什么_discountGroups列表总是空的,即使它在数据库中都是正确的。

我看过有关使用ISet而不是IList的建议但是它似乎对我的情况没有任何影响,neiter确实使用了     .Not.LazyLoad() 在映射中。删除AsBag()和AsSet()也没什么区别。

实体

public class DiscountDay
{
    public virtual DayOfWeek DayOfWeek { get; set; }

    public virtual Discount Discount { get; set; }

    private readonly IList<DiscountGroup> _discountGroups = new List<DiscountGroup>();

    public virtual IEnumerable<DiscountGroup> DiscountGroups
    {
        get { return _discountGroups; }
        set { }
    }
}

public class DiscountGroup
{
    public virtual string Name { get; set; }

    private readonly IList<DiscountDay> _discountDay = new List<DiscountDay>();

    public virtual IEnumerable<DiscountDay> DiscountDay 
    {
        get { return _discountDay; }
    }
}

映射

public class DiscountDayOverride : IAutoMappingOverride<DiscountDay>
{
    public void Override(AutoMapping<DiscountDay> mapping)
    {
        mapping.HasManyToMany( x => x.DiscountGroups )
            .AsSet()
            .Cascade
            .SaveUpdate();
        mapping.Cache.ReadWrite();
    }
}

public class DiscountGroupOverride : IAutoMappingOverride<DiscountGroup>
{
    public void Override(AutoMapping<DiscountGroup> mapping)
    {
        mapping.HasManyToMany( x => x.DiscountDay )
            .AsBag()
            .Inverse();
        mapping.Cache.ReadWrite();
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,我是一个完整而彻底的笨蛋。 DiscountDay实体上的DiscountGroups上的空集导致了该问题。出于某些原因,我对它进行了掩饰,并没有认为空集会做任何事情。

更新的代码:

public virtual IEnumerable<DiscountGroup> DiscountGroups
{
    get { return _discountGroups; }
}