nHibernate Lista valores nulos em um-para-muitos
-
13-09-2019 - |
Pergunta
Eu tenho um mapeamento Ordem com muitos OrderItems. O mapeamento salva corretamente tanto a Ordem e OrderItems ao banco de dados quando eu faço uma gravação apenas na Ordem, mas quando eu recarregar nessa ordem, a lista de OrderItems que a ordem contém é preenchido com valores nulos (para todos os itens othe ordem em a mesa) até atingir o OrderItem que tem chave estrangeira da Ordem. Portanto, a contagem total de itens de ordem nula é a contagem de linhas da tabela de OrderItems, (sans os itens da ordem de reais que estão relacionados com a Ordem). Aqui está o meu mapeamentos:
Ordem:
<list name="OrderItems" table="OrderItems" cascade="all" inverse="true" >
<key column="OrderID"/>
<index column="OrderItemID" />
<one-to-many class="OrderItem" not-found="ignore" />
</list>
OrderItem:
<many-to-one name="Order" class="Order" column="OrderID" not-null="true" />
Aqui está implementação de classe da Ordem:
public class Order : {
private IList<OrderItem> orderItems = new List<OrderItem>();
Eu li que nHibernate não suporta listas como a muitos parte de um relacionamento, mas o salvamento funciona corretamente, não apenas a carga. Eu tenho que converter tudo para Conjuntos para que isso funcione?
Solução
Apenas do topo da minha cabeça, eu me lembro de ter problemas com
<list>
e recorreu a
<bag>
em vez de mapear para a interface .NET IList. Não tenho certeza se isso vai resolver o seu problema.
O que pode ser útil é olhar para a forma como o SQL real que é bater o banco de dados é diferente do que você espera habilitando o log para Console.Out ( veja este blog )
Outras dicas
Não é este causado porque sua coleção OrderItems é preguiçoso carregado? Se você especificar preguiçoso = false na sua lista (ou bolsa) mapeamento, então isso não deve ser mais o caso.
O offcourse questão é, quer de carga preguiçoso os OrderItems, ou não? :)