2010-01-15 16 views
8

Necesito ayuda con la carga ansiosa con Linq en la versión de tronco NHibernate 3.Carga ansiosa durante el uso de Linq en NHibernate 3

que tienen una relación de muchos a muchos como esto:

public class Post 
{ 
    public int Id {get;set;} 
    public IList<Tag> Tags { get;set;} 
    . 
    . 
    . 
} 

ahora tengo la siguiente asignación de Fluido NHibernate

public class PostMap:ClassMap<Post> 
{ 
    public PostMap() 
    { 
     Table("Posts"); 
     Id(x => x.Id); 
     . 
     . 
     HasManyToMany(x => x.Tags) 
      .Table("PostsTags") 
      .ParentKeyColumn("PostId") 
      .ChildKeyColumn("TagId") 
      .Not.LazyLoad(); // this is not working.. 
    } 
} 

Ahora al recuperar los mensajes, necesito el etiquetas también a la carga ansiosa. Sé que es posible con Criteria API y HQL y el SetFetchMode es lo que debería usar. Pero, ¿hay alguna forma de usar SetFetchMode cuando se usa Linq?

Respuesta

13

El soporte para esto entró en el maletero hace algún tiempo; la sintaxis es algo así como

var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags); 

Si etiquetas a su vez tenía otra relación, que puede hacer:

var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags).ThenFetch(t => t.SomethingElse); 
+3

Fetch deben ponerse a continuación Dónde o se obtendrá una excepción. –

+0

@Nicolas Cadilhac, @Steve Strong - ¿cómo agregar un lugar después de un ThenFetch? La respuesta de Nicolas dice que lo anterior no funciona, pero es la respuesta aceptada, así que estoy confundido – leora

+0

@Nicolas Cadilhac, @Steve Strong - Cuando ejecuto esto, recibo una "excepción no admitida" – leora

Cuestiones relacionadas