2008-12-04 9 views
14

Soy un novato en el gran mundo de NHibernate. Estoy usando la versión 2.0.1.GA. Aquí está mi pregunta Tengo una tabla Cars con la columna Manufacturer(nvarchar(50)) y una clave principal ID(int). Mi clase de .NET es:C# Lambda expressions y NHibernate

public class Car 
{ 
    public virtual int ID { get; set; } 
    public virtual string Manufacturer { get; set; } 
} 

Ahora si quiero recuperar todos los coches fabricados por Mercedes Tengo que escribir esto:

using (var session = OpenSession()) 
{ 
    var cars = session 
     .CreateCriteria(typeof(Car)) 
     .Add(Restrictions.Like("Manufacturer", "Mercedes")) 
     .List(); 
    // ... 
} 

no me gusta el hecho de que tengo que especificar el nombre de la propiedad como una cadena :( ¿es posible tener algo más amigable refactor probable (es sólo una sugerencia)?

var ms = session 
    .CreateCriteria<Car>() 
    .Add(c => c.Manufacturer, Restrictions.Like("Mercedes") 
    .List(); 

nada como se adelgaza en la versión actual (2.0.1.GA) o en un futu re versión?

Respuesta

9

Como dijo Google Ninja, puedes hacerlo con NHibernate.Linq. La consulta sería entonces:

session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

Si alguien termina aquí y está utilizando la sintaxis NH3.0 es sólo un poco diferente (gracias a Michael Mrozek y Mike por la sugerencia):

session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

He utilizado un archivo binario que viene incluido con fluent-nhibernate que funciona con 2.0GA (creo que no estoy seguro acerca de la revisión en particular).

+0

Gracias, no tengo la sintaxis en la parte superior de mi cabeza, +1 –

+0

Podría observar que "me gusta" y "igual" no producirán los mismos resultados. Recientemente probé (no muy difícil) para encontrar una manera de hacer "me gusta" en NHibnate.Linq. Me di por vencido y usé ICriteria en su lugar. –

+0

En una edición sugerida [Mike] (http://stackoverflow.com/users/77939/mike) señaló que "Si está utilizando NHibernate 3.0 o posterior, el proveedor de LINQ está integrado. El uso es ligeramente diferente: 'session.Query .Where (c => c.Manufacturer ==" Mercedes "). ToList()' " –

1

Mire this question here. Alguien tenía la misma preocupación, y por lo que sé, NHibernate.Linq está bien vivo.