我们说我有一个班级
public class Person
{
public Person()
{
Friends = new Collection<Person>();
}
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Person> Friends { get; set; }
}
使用以下映射:
<class name="Person">
<id name="Id" generator="guid"/>
<property name="Name" />
<set name="Friends">
<key column="PersonId" foreign-key="none"/>
<many-to-many class="Person" foreign-key="none"/>
</set>
</class>
我试图吸引所有人并急切加载好友集合 ids 。
我不需要加载整个Friends集合,只需要加载朋友的ID
以下内容:
var persons = session.QueryOver<Person>()
.Fetch(p => p.Friends).Eager
.List<Person>();
生成这个sql语句:
SELECT this_.Id as Id0_1_,
this_.Name as Name0_1_,
friends2_.PersonId as PersonId3_,
person3_.Id as elt3_,
person3_.Id as Id0_0_,
person3_.Name as Name0_0_
FROM Person this_
left outer join Friends friends2_
on this_.Id = friends2_.PersonId
left outer join Person person3_
on friends2_.elt = person3_.Id
这显然也吸引了所有的朋友实体 我尝试了很多组合,但无济于事 *我知道,因为它是同一个类,所以页面都会被加载。 我的问题是一般性的 - 只加载集合的ID。