0
考慮下面的映射:NHibernate的不灌裝設置,但SQL是正確的
<class name="Articulo" table="Articulos">
<id name="Id" column="IdArticulo"/>
<set name="CodigosProveedor" inverse="true" fetch="select">
<key>
<column name="IdArticulo"/>
</key>
<one-to-many class="ArticuloProveedor"/>
</set>
<set name="PuntosPedido" inverse="true" fetch="select">
<key column="IdArticulo" foreign-key="IdArticulo"/>
<one-to-many class="PuntoPedido"/>
</set>
...
</class>
<class name="PuntoPedido" table="PersISAVAL_SPCO_Previsiones_PuntosPedidoMes">
<composite-id>
<key-many-to-one name="Articulo" column="IdArticulo"/>
<key-many-to-one name="Color" column="IdColor"/>
<key-many-to-one name="Proveedor" column="IdProveedor"/>
</composite-id>
<property name="Valor" column="PuntoPedido"/>
</class>
<class name="ArticuloProveedor" table="Prov_Articulos">
<composite-id>
<key-property name="IdArticulo" column="IdArticulo"/>
<key-property name="IdProveedor" column="IdProveedor"/>
</composite-id>
<property name="LeadTimeForzado" column="PlazoAprovisionamiento"/>
<property name="IdEstadoHomologacion" column="Estado_Homologacion"/>
<many-to-one name="Articulo" column="IdArticulo"/>
<many-to-one name="Proveedor" column="IdProveedor"/>
</class>
然後調用:
_session.QueryOver<Articulo>()
.Where(e => e.ProveedorPreferencial == p)
.Fetch(a => a.CodigosProveedor).Eager
.Future();
_session.QueryOver<Articulo>()
.Where(a => a.ProveedorPreferencial == p)
.Fetch(a => a.PuntosPedido).Eager
.Future();
返回的SQL語句,似乎這兩個屬性是正確的,但是,CodigosProveedor
得到正確加載但PuntosPedido
保持空白。這是爲什麼發生?
SQL語句,它們看起來似乎是相同的:
SELECT this_.IdArticulo as IdArti1_4_1_,
this_.Descrip as Descri2_4_1_,
this_.IdProveedorPreferencial as IdPro11_4_1_,
puntospedi2_.IdArticulo as IdArt1_53_3_,
puntospedi2_.IdColor as IdCol2_53_3_,
puntospedi2_.IdProveedor as IdPro3_53_3_,
puntospedi2_.IdArticulo as IdArt1_53_0_,
puntospedi2_.IdColor as IdCol2_53_0_,
puntospedi2_.IdProveedor as IdPro3_53_0_,
puntospedi2_.PuntoPedido as Punto4_53_0_
FROM Articulos this_
inner join Conf_Articulos this_1_
on this_.IdArticulo = this_1_.IdArticulo
left outer join PersISAVAL_SPCO_Previsiones_PuntosPedidoMes puntospedi2_
on this_.IdArticulo = puntospedi2_.IdArticulo
WHERE this_.IdProveedorPreferencial = '01816';
SELECT this_.IdArticulo as IdArti1_4_1_,
this_.Descrip as Descri2_4_1_,
this_.IdProveedorPreferencial as IdPro11_4_1_,
codigospro2_.IdArticulo as IdArt1_51_3_,
codigospro2_.IdProveedor as IdPro2_51_3_,
codigospro2_.IdArticulo as IdArt1_51_0_,
codigospro2_.IdProveedor as IdPro2_51_0_,
codigospro2_.PlazoAprovisionamiento as Plazo3_51_0_,
codigospro2_.Estado_Homologacion as Estad4_51_0_
FROM Articulos this_
inner join Conf_Articulos this_1_
on this_.IdArticulo = this_1_.IdArticulo
left outer join Prov_Articulos codigospro2_
on this_.IdArticulo = codigospro2_.IdArticulo
WHERE this_.IdProveedorPreferencial = '01816';
如果我直接執行這個SQL,它不是空的。
您顯示的電話不會調用任何內容。它只會聲明兩個期貨,而不會將它們存儲在某些變量中以供以後執行。你如何觸發他們的執行? –