Я прочитал это tutorial и этот article, но я не понимаю, как именно использовать каждый тип загрузки.Eager, Lazy и явная загрузка в EF6
Объясняет
У меня есть этот ПОКО:
public partial class dpc_gestion
{
public dpc_gestion()
{
this.ass_reunion_participant = new HashSet<ass_reunion_participant>();
this.dpc_participant = new HashSet<dpc_participant>();
this.dpc_reunion = new HashSet<dpc_reunion>();
}
public int dpc_id_pk { get; set; }
public Nullable<int> dpc_id_gdp_fk { get; set; }
public Nullable<int> dpc_id_theme { get; set; }
public int dpc_id_animateur_fk { get; set; }
public Nullable<System.DateTime> dpc_date_creation { get; set; }
public Nullable<System.DateTime> dpc_date_fin { get; set; }
public Nullable<System.DateTime> dpc_date_engag_anim { get; set; }
public Nullable<bool> dpc_flg_let_engag_anim { get; set; }
public Nullable<bool> dpc_flg_fsoins_anim { get; set; }
public virtual ICollection<ass_reunion_participant> ass_reunion_participant { get; set; }
public virtual theme_dpc theme_dpc { get; set; }
public virtual gdp_groupe_de_pair gdp_groupe_de_pair { get; set; }
public virtual ICollection<dpc_participant> dpc_participant { get; set; }
public virtual ICollection<dpc_reunion> dpc_reunion { get; set; }
}
Я понял это:
для ленивой загрузки: потому что нагрузка ленива, если я позвоню dbset
dpc_gestion
все навигационные свойства не будет. Этот тип загрузки является лучшим в производительности и быстроте. Она включена по умолчанию, и если я хотел бы включить его я должен установить:context.Configuration.ProxyCreationEnabled = true; context.Configuration.LazyLoadingEnabled = true;
Для жадной загрузки Это не лень: он грузится все навигационные свойства, когда я загружаю
dpc_gestion
, Свойства навигации можно загрузить с использованием методаinclude
. Чтобы включить этот тип загрузки:context.Configuration.LazyLoadingEnabled = false;
Для явной загрузки Это как нетерпеливые нагрузки, но мы используем
Load
метод вместоinclude
.
Так что я хотел бы знать:
- Если это небольшое резюме верно?
- Если это правда, в чем разница между энергичной и явной загрузкой?
- Если я использую ленивая загрузка, и я звоню, например,
dpc_gestion.dpc_participant
, загружаются ли свойства навигации? Или я получу исключение? - Есть ли случай, когда интенсивная загрузка или явная загрузка были лучше, чем ленивая загрузка в производительности и отзывчивости?
Благодаря
@LamloumiAfif ... Еще одна вещь, которую следует отметить: Lazy loading приведет к нескольким запросам SQL, в то время как Eager загружает данные загрузки одним запросом. –
Кроме того, установка 'LazyLoadingEnabled = false' не активирует загрузку. Это отключает ленивую загрузку. Можно загружать загрузку с помощью 'Include', когда включена ленивая загрузка – Colin