문제

I have abstract class MultipleItems which has list of OrderItem objects:

public abstract class MultipleItems
{
    ...
    private IList<OrderItem> _orderItems = new List<OrderItem>();

    public virtual IList<OrderItem> OrderItems {
        get
        {
            return this._orderItems;
        }
        set { }
    }
    ...
}

Class Menu inherits class MultipleItems:

public class Menu : MultipleItems
{
    public virtual string Name { get; set; }

    public Menu(string name)
    {
        Name = name;
    }

    public Menu() { }
}

I'm mapping it table-per-type:

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

Problem is, when I try to load menus with, for example, this:

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

List is empty when it shouldn't be... I also checked SQL query and it's all there, but just isn't loading.

EDIT: OrderItem class:

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

    }
}
도움이 되었습니까?

해결책

Your mapping for OrderItems doesn't specify that the collection should be mapped to a private field, and the empty set causes the list to not be populated. I would remove the empty setter and change the mapping to:

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();
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top