Мы столкнулись с той же проблемой с довольно большим QueryOver
- Cannot simultaneously fetch multiple bags
, с сопоставлениями Nhibernate 4 и FluentNhibernate.
Решение было на наших FluentMaps, чтобы установить AsSet()
(в соответствии с нашими полями поддержки), которые в конце концов решили проблему.
По запросу в комментариях, вот небольшой пример наших отображений до и после исключения:
Это очень упрощенная витрина наших классов, вызвавших Cannot simultaneously fetch multiple bags
. Резюме Entity
класс belongs to the S#Arp lite architecture. До изменений это выглядело как-то этого
public class OrderHeader : Entity
{
public virtual IList<OrderItem> Items { get; set; }
}
public class OrderItem : Entity
{
public virtual decimal Price {get; set;}
public virtual string ItemNumber {get; set;}
public virtual OrderHeader Header {get; set;}
}
public class OrderHeaderMap : ClassMap<OrderHeader>
{
Id(e => e.Id).GeneratedBy.Native();
HasMany(e => e.OrderItems).Inverse();
}
public class OrderItemMap : ClassMap<OrderItem>
{
Id(e => e.Id).GeneratedBy.Native();
References(e => e.Header).Not.Nullable();
}
Как вы можете видеть, что OrderHeader имеет IList
элементов. Изменение этого
public class OrderHeader : Entity
{
public virtual ISet<OrderItem> Items { get; set; } // ISet here
}
public class OrderItem : Entity
{
public virtual decimal Price {get; set;}
public virtual string ItemNumber {get; set;}
public virtual OrderHeader Header {get; set;}
}
public class OrderHeaderMap : ClassMap<OrderHeader>
{
Id(e => e.Id).GeneratedBy.Native();
HasMany(e => e.OrderItems).Inverse();
}
public class OrderItemMap : ClassMap<OrderItem>
{
Id(e => e.Id).GeneratedBy.Native();
References(e => e.Header).Not.Nullable().AsSet(); // Explicit AsSet
}
Так в ISet
и явный AsSet()
на картографированиях сделали вопрос уйти. Этот фрагмент кода очень упрощен, и у нас было несколько объектов в QueryOver
с HasMany()
IList
- когда все были обновлены до ISet
, он работал правильно.
Справедливый вопрос, но опрос, тем не менее. –
Прекрасный комментарий, я более точно сформулировал свою заботу. Мне нравится эта функция удержания, это моя первая встреча, и она намного лучше, чем старая просто закрыта. – dove