Как работает fetch

Возможный дубликат:
NHibernate Join Fetch (добрый)

Я прочитал статью. 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 запроса? Как я могу получить один запрос с объединением?

1 ответ

Решение

Пытаться

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

Попробуйте отключить ленивую загрузку, так что она будет загружаться по умолчанию

Другие вопросы по тегам