carico ansioso mentre usando Linq in NHibernate 3
-
20-09-2019 - |
Domanda
Ho bisogno di aiuto con eager loading con LINQ in NHibernate 3 versione tronco.
Ho una relazione molti-a-molti in questo modo:
public class Post
{
public int Id {get;set;}
public IList<Tag> Tags { get;set;}
.
.
.
}
Ora ho la seguente mappatura in Fluent 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..
}
}
Ora durante il recupero i post, ho bisogno del Tag anche a carico ansioso. So che è possibile con criteri di API e HQL e la setFetchMode è quello che dovrei usare. Ma è che ci sono modo per utilizzare setFetchMode quando si utilizza LINQ?
Soluzione
Il supporto per questo è andato in tronco qualche tempo fa; la sintassi è qualcosa di simile
var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags);
Se Tag a sua volta ha avuto un altro rapporto, si può fare:
var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags).ThenFetch(t => t.SomethingElse);
Altri suggerimenti
Per me questa discussione risolvere il problema.
LINQ per NHibernate - il filtraggio su
var linqsession = session.Linq<FeedItem>();
linqsession.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var feedItemQuery = from ad in linqsession.Expand("Ads")
where ad.Id == Id
select ad