ここで何が起こっているのか分かりません。 NHibernateを使っていくつかの結果を取得しようとすると、ループに入ります。NHibernateが同じクエリを何度も何度も繰り返すことがありました
私はNHibernateにマップされた以下の2つのドメインオブジェクトを持っています。
public class Orden
{
public virtual int Id { get; set; }
public virtual Lanzamiento Lanzamiento { get; set; }
public virtual DateTime FechaOrden { get; set; }
public virtual IArticulo Articulo { get; set; }
public virtual double Cantidad { get; set; }
public virtual int IdEstado { get; set; }
public virtual string Observaciones { get; set; }
public virtual Lote Lote { get; set; }
public virtual ISet<OrdenBono> Bonos { get; set; }
}
public class OrdenBono
{
public virtual Orden Orden { get; set; }
public virtual int Id { get; set; }
public virtual string Descripcion { get; set; }
public virtual ISet<OrdenBonoEntrada> Entradas { get; set; }
public virtual ISet<OrdenBonoSalida> Salidas { get; set; }
public virtual int IdEstado { get; set; }
public virtual Maquina Maquina { get; set; }
public override bool Equals(object obj)
{
OrdenBono u = obj as OrdenBono;
if (u == null) return false;
return u.Orden == Orden && u.Id == Id;
}
public override int GetHashCode()
{
int hash = 13;
hash = hash * 7 + Orden.GetHashCode();
hash = hash * 7 + Id.GetHashCode();
return hash;
}
}
何もありません。それから私は、次のコードでそれらのいくつかを照会しています:私はOrdenesSinFinalizarEnvasadoPorMaquina
呼び出すと
public IQueryOver<Orden, Orden> QueryOrdenesPorMaquina(Maquina m)
{
ISession session = NHibernateHelper.GetSession();
session.BeginTransaction();
return session.QueryOver<Orden>()
.WithSubquery.WhereProperty(o => o.Id)
.In(
QueryOver.Of<OrdenBono>()
.Where(ob => ob.Maquina == m)
.Select(ob => ob.Orden.Id)
);
}
public IQueryOver<Orden> QueryOrdenesSinFinalizarEnvasadoPorMaquina(Maquina m)
{
return QueryOrdenesPorMaquina(m)
.WithSubquery.WhereProperty(o => o.Id).In(
QueryOver.Of<OrdenBono>()
.Where(ob => ob.Descripcion.IsLike("Prod%") && ob.IdEstado == 2)
.JoinQueryOver(ob => ob.Orden)
.JoinQueryOver<OrdenBono>(o2 => o2.Bonos)
.Where(ob => ob.Descripcion.IsLike("Env%") && ob.IdEstado < 2)
.Select(ob => ob.Orden.Id)
);
}
public IEnumerable<Orden> ObtenerOrdenesPorMaquina(Maquina m)
{
return QueryOrdenesPorMaquina(m).List();
}
public IEnumerable<Orden> OrdenesSinFinalizarEnvasadoPorMaquina(Maquina m)
{
return QueryOrdenesSinFinalizarEnvasadoPorMaquina(m).List();
}
public int NumeroOrdenesSinFinalizarEnvasadoPorMaquina(Maquina m)
{
return QueryOrdenesSinFinalizarEnvasadoPorMaquina(m).RowCount();
}
それは、最初のクエリOKを行いますが、それが何度も同じクエリを繰り返すループに入った、と私はドン」理由を理解できない!
私がRowCount()
と呼んだ場合、正常に動作し、3
が返されますが、IEnumerable
は機能しません。これは、私はそれが正しいだと私が探しているデータを取得し、見ることができる最初の行、のコンソールから出力さ:
しかし、それは終わって、次のクエリ上を繰り返し続ける:
NHibernate: SELECT orden0_.IdOrden as IdOrd1_15_1_, orden0_.FechaOrden as Fecha2_15_1_, orden0_.IdArticulo as IdArt3_15_1_, orden0_.Cantidad as Canti4_15_1_, orden0_.Observaciones as Obser5_15_1_, orden0_.IdEstado as IdEst6_15_1_, orden0_.IdLanzamiento as IdLan7_15_1_, orden0_.Lote as Lote8_15_1_, bonos1_.IdOrden as IdOrd1_16_3_, bonos1_.IdBono as IdBon2_16_3_, bonos1_.IdOrden as IdOrd1_16_0_, bonos1_.IdBono as IdBon2_16_0_, bonos1_.Descrip as Descr3_16_0_, bonos1_.IdEstado as IdEst4_16_0_, bonos1_.Matricula as Matri5_16_0_ FROM Ordenes orden0_ left outer join Ordenes_Bonos bonos1_ on orden0_.IdOrden=bonos1_.IdOrden WHERE [email protected];@p0 = 97857 [Type: Int32 (0:0:0)]
あなたはここで見ることができるように: