流利的NHibernate缺少一对多的参考



我有抽象类MultipleItems,其中包含OrderItem对象列表:

public abstract class MultipleItems
{
    ...
    private IList<OrderItem> _orderItems = new List<OrderItem>();
    public virtual IList<OrderItem> OrderItems {
        get
        {
            return this._orderItems;
        }
        set { }
    }
    ...
}

菜单继承类多个项目:

public class Menu : MultipleItems
{
    public virtual string Name { get; set; }
    public Menu(string name)
    {
        Name = name;
    }
    public Menu() { }
}

我正在按类型映射它:

public class MultipleItemsMap : ClassMap<MultipleItems>
{
    public MultipleItemsMap()
    {
        Id(i => i.id);
        Map(i => i.Total);
        Map(i => i.Discount);
        HasMany(i => i.OrderItems).Cascade.All();
    }
}
public class MenuMap : SubclassMap<Menu>
{
    public MenuMap()
    {
        KeyColumn("id");       
        Map(i => i.Name);
    }
}

问题是,当我尝试加载菜单时,例如:

session.QueryOver<Menu>().Fetch(i => i.OrderItems).Eager.List();

列表在不应该为空时为空...我还检查了SQL查询,它都在那里,但没有加载。

编辑: 订单项类:

public class OrderItemMap : ClassMap<OrderItem>
{
    public OrderItemMap()
    {
        Id(x => x.id);           
        Map(x => x.Total);
        Map(x => x.Qty);
        Map(x => x.ItemName);
        Map(x => x.ItemType);
        References(x => x.Item).Not.LazyLoad();
    }
}

OrderItems 的映射未指定集合应映射到私有字段,并且空集会导致不填充列表。我会删除空的 setter 并将映射更改为:

public class MultipleItemsMap : ClassMap<MultipleItems>
{
    public MultipleItemsMap()
    {
        Id(i => i.id);
        Map(i => i.Total);
        Map(i => i.Discount);
        HasMany(i => i.OrderItems).Access.CamelCaseField(Prefix.Underscore)
            .Cascade.All();
    }
}

最新更新