1

可能重复:
NHibernate Join Fetch(Kind)

我读过文章。 http://fabiomaulo.blogspot.com/2010/03/conform-mapping-components.html

试图在我的项目中重现它并得到奇怪的行为。

我有两个实体:

Plan 
{ 
    public virtual int Id { get; set; } 
    public virtual Payer Payer { get; set; } 
} 

Payer 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

为其映射:

 orm.Cascade<Payer, Plan >(CascadeOn.Persist | CascadeOn.Merge); 
 orm.Cascade<Plan, Payer>(CascadeOn.None); 

拿来:

mapper.Customize<CarePlan>(cm => cm.ManyToOne(o => o.Payer, x => 
x.Fetch(FetchKind.Join))); 

简单获取:

    var plan = session.Query<Plan>().Where(c=>c.Id == 
    1).SingleOrDefault(); 

 Console.WriteLine(plan.Payer.Name); 

我得到了这个查询:

select careplan0_.Id 
       careplan0_.PayerId 
from   CarePlans careplan0_ 
where  careplan0_.Id = 1 /* @p0 */ 
and other query 
SELECT payer0_.Id , 
payer0_.Name    as Name 
FROM   Payers payer0_ 
WHERE  payer0_.Id = 2 

为什么我有 2 个查询?如何通过连接获得一个查询?

4

1 回答 1

1

尝试

var plan = session.Query() .Where(c=>c.Id == 1) .Fetch(x => x.Player).Eager .SingleOrDefault();

尝试禁用延迟加载,因此默认情况下它将急切加载

于 2012-02-13T18:52:26.193 回答