2015-02-13 1 views
2

Если я указываю PropertyRef на ссылках (многие к одному) - это охотно выбирает все связанные записи:Свободное nHibernate PropertyRef с нетерпением запрашивает ссылки на записи. Могу ли я отключить его?

References(x => x.Panel).PropertyRef(x => x.Code).Not.Insert().Not.Update(); 

Могу ли я отключить, что N + 1 выберите проблему?

Здесь я вижу, что эта проблема известна, но есть ли обходной путь? Lazy loading not working for many-to-one relationship when mapping to a non-key field using property-ref

ответ

1

Существует обходное решение. Но только из-за того, что ваше много-единственное доступно только для чтения (и нам не нужно заботиться о проблемах с вставкой/udpate позже). Как? Ввод виртуального объекта, например. PanelView

// Readonly mapping, virtual class 
// which ID role is playing column panel_CODE 
public PanelViewMapping() 
{ 
    Table("panel-table"); 
    Id(x => x.Code) 
     .Column("panel_CODE") 
     .GeneratedBy.Assigned(); 
    ... 

Теперь мы должны настроить POCO объект:

// instead of this 
// public virtual Panel Panel { get; set; } 
// we will have this 
public virtual PanelView Panel { get; set; } 

И тогда мы можем использовать его в качестве первичного ключа отображения:

References(x => x.Panel) 
    //.PropertyRef(x => x.Code) 
.Not.Insert() 
.Not.Update(); 

И все особенности (ленивая загрузка) будет работать должным образом.

+0

Ничего себе, это выглядит правильно и многообещающе. Я проверю это завтра. –

+0

Да, для устаревшей БД это так ... желаю, чтобы это вам помогло. Конечно, есть некоторые проблемы, если отношение должно быть редактируемым. Но для readonly ... это сработает. Я тестировал;) Удачи с NHibernate sir;) –

Смежные вопросы