visual studio net framework example nhibernate

nhibernate - studio - Fetches mĂșltiples en linq para nhibernar



nhibernate vs entity framework (1)

Bueno, la consulta aún devolverá los resultados que desea, pero como se indicó, devolverá un producto cartesiano, es decir, la consulta SQL devolverá los resultados de count(e.Subordinates) * count(e.Orders) , que podrían sumarse con bastante rapidez , especialmente si tienes más de dos colecciones.

NHibernate presentó Futures con la versión 2.1. Desafortunadamente, parece que no hay forma en la versión actual de NHibernate 3.0 para hacer que funcionen con NHibernate.Linq ( session.Query<T>() ).

Los futuros le permiten realizar múltiples consultas en un viaje de ida y vuelta a la base de datos (siempre que la base de datos lo admita, pero la mayoría lo hace). En ese caso solo tendrá resultados de count(e.Subordinates) + count(e.Orders) , que obviamente es el mínimo.

Los futuros funcionan con la API de criterios, HQL y se supone que funcionan con la nueva API de QueryOver (todavía no lo he probado).

NHibernate.Linq tiene Query (). ToFuture () y Query (). ToFutureValue (), pero hasta ahora solo obtengo excepciones cuando las uso.

Editar:

Acabo de verificar nuevamente la API de Linq y parece que está funcionando si no usas Fetch. Lo siguiente resultará en tres consultas SQL que se ejecutan en un viaje de ida y vuelta. El número total de filas devueltas será 1 + cuenta (subordinados) + cuenta (órdenes).

int id = 1; // get the Employee with the id defined above var employee = repo.Session.Query<Employee>() .Where(o => o.Id == id) .ToFuture<Employee>(); // get the Subordinates (these are other employees?) var subordinates = repo.Session.Query<Employee>() .Where(o => o.HeadEmployee.Id == id) .ToFuture<Employee>(); // get the Orders for the employee var orders = repo.Session.Query<Order>() .Where(o => o.Employee.Id == id) .ToFuture<Order>(); // execute all three queries in one roundtrip var list = employee.ToList(); // get the first (and only) Employee in the list, NHibernate will have populated the Subordinates and Orders Employee empl = list.FirstOrDefault();

Gracias por haber marcado esto como la respuesta de todos modos.

Estaba mirando this

Tenga cuidado de no obtener con entusiasmo múltiples propiedades de colección al mismo tiempo. Aunque esta declaración funcionará bien:

var empleados = session.Query () .Fetch (e => e.Subordinates) .Fetch (e => e.Orders) .ToList ();

Necesito obtener 2 referencias, así que tendría que hacer algo así. ¿Hay una mejor manera de hacer esto?

No puedo hacer .ThenFetchMany() ya que va hacia los objetos secundarios, pero los que busco en el mismo nivel.