我需要帮助在NHibernate 3 trunk版本中使用Linq进行急切加载。
我有这样的多对多关系:
public class Post
{
public int Id {get;set;}
public IList<Tag> Tags { get;set;}
.
.
.
}
现在我在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..
}
}
现在,在获取帖子时,我还需要标签来加载。我知道有可能使用Criteria API和HQL,而SetFetchMode就是我应该使用的。但使用Linq时是否有使用SetFetchMode的方法?
答案 0 :(得分:13)
对此的支持不久前进入后备箱;语法类似于
var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags);
如果标签又有另一种关系,你可以这样做:
var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags).ThenFetch(t => t.SomethingElse);
答案 1 :(得分:-2)
对我来说,这个线程解决了问题。
Linq for NHibernate - filtering on <many-to-one> foreign key causes extra lookup
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