我使用NHibernate 3.2與LINQ和n + 1選擇查詢inq SQL。在映射獲取集合「加入」。當我使用標準時,只有一個選擇查詢。我也找不到方法Fetch()
或FetchMany()
,我看到了不同的例子。是否有任何方法來解決使用Linq到Nhibernate 3.2的n + 1問題?
我的代碼NHibernate 3.2 LINQ n + 1解決方案
class News
{
public virtual int Id { get; protected set; }
public virtual DateTime Date { get; set; }
public virtual Category Category { get; set; }
}
class Category
{
public virtual int Id { get; protected set; }
public virtual ISet<News> News { get; set; }
}
映射簡體版:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
<class name="News" table="News">
<id name="Id">
<generator class="native" />
</id>
<property name="Date" not-null="true" />
<many-to-one name="Category" fetch="join" column="CategoryId" class="Category, NHibernateManyToOne" not-null="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
<class name="Category" table="Categories">
<id name="Id" column="Id">
<generator class="native" />
</id>
<set name="News" fetch="join" cascade="all-delete-orphan">
<key column="CategoryId" />
<one-to-many class="News, NHibernateOneToMany" />
</set>
</class>
</hibernate-mapping>
查詢,導致許多選擇:
var news = newsRepository.Linq().Skip(DefaultPageSize*currentPageIndex).Take(DefaultPageSize).OrderByDescending(x => x.Date).ToList();
這是怎麼了,沒有多餘的選擇:
var criteria = Session.CreateCriteria<News>();
criteria = criteria.AddOrder(Order.Desc(property));
criteria = criteria.SetMaxResults(pageSize).SetFirstResult((pageNumber - 1)*pageSize);
var news = criteria.List<News>();
也許我們可以看到,如果你告訴我們你想要做... – 2011-12-23 13:20:07
@FelicePollano對不起哪個實體您AR E使用和查詢,現在代碼是在這裏 – 2011-12-23 13:58:58