NHibernate加入获取(种类)

NHibernate加入获取(种类),nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,给定团队->运动员关系并查询所有运动员。什么 我是否误解了fetch=“Join”?这个映射是否会导致 要通过联接加载的团队?当迭代运动员时,它 仍然懒散的团队 public class AthleteMap : ClassMapping<Athlete> { public AthleteMap() { ManyToOne(a => a.Team, o =>

给定团队->运动员关系并查询所有运动员。什么 我是否误解了
fetch=“Join”
?这个映射是否会导致 要通过联接加载的团队?当迭代运动员时,它 仍然懒散的团队

public class AthleteMap : ClassMapping<Athlete>
{
        public AthleteMap()
        {
            ManyToOne(a => a.Team, o =>
                                       {
                                           o.Fetch(FetchKind.Join);
                                           o.Lazy(LazyRelation.NoLazy);
                                       }
                );    
        }    
}
公共类AthleteMap:ClassMapping
{
公共体育地图()
{
多通(a=>a.团队,o=>
{
o、 Fetch(FetchKind.Join);
o、 懒惰的(懒散的关系);
}
);    
}    
}
它产生了这个HBM:

<class name="Athlete" table="Athletes">
    <id name="Id" type="Int32" />
    <property name="FirstName" />
    <property name="LastName" />
    <many-to-one name="Team" fetch="join" lazy="false" />
    <property name="Created" />
</class>

迭代:

var session = factory.OpenSession();

 foreach (var athlete in session.Query<Athlete>())
     Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name); 
var session=factory.OpenSession();
foreach(会话中的var.Query())
Console.WriteLine(“{0}{1}”,attacher.FirstName,attacher.Team.Name);

NHibernate Linq查询不使用映射的获取策略。您必须像这样在linq查询中获取()

var session = factory.OpenSession();

foreach (var athlete in session.Query<Athlete>().Fetch(x => x.Team))
   Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name); 
var session=factory.OpenSession();

弗雷奇(var Athletor in session.Query

您是否得到异常?这是为什么?当您迭代时,您会看到每个
Athletor
的查询都会获取一个
团队
?我的意思是,映射是正确的,除了急切获取之外?没有异常。@GertArnold yes在迭代时,它会在每次迭代时查询团队。谢谢…可惜他们的Linq实现不完整。)我喜欢这样。