/ / Má Entity Framework Zahrnúť potreby .First ()? - c #, framework entity, linq-to-entity

Obsahuje rámcová entita požiadavky na .First ()? - c #, entity-framework, linq-to-entities

Pri nastavovaní dychtivého načítania v čase vytvorenia kontextu, mnoho príkladov použitia Include v EF vyzerá takto (vzhľadom na dva súvisiace subjekty nazvané Zdroje a variácie):

var context = new MyContext();
context.Resources.Include(x => x.Variations).First();
return context;

Ale iní nie:

context.Resources.Include(x => x.Variations);

Zdá sa, že len prvý z nich pracuje pre mňa, ale nemôžem nájsť žiadne vysvetlenie, prečo je to potrebné?

odpovede:

2 pre odpoveď č. 1
context.Resources.Include(x => x.Variations);

konštruuje dotaz, ktorý pri spustení načíta všetkya ich variácií. Potom tento dotaz zahodíte. Nikdy nevykonávate dotaz, čo znamená, že nezískate výsledky dotazu a nedostanete vedľajšie účinky vykonávania tohto dotazu.

Môžete buď urobiť niečo so zdrojmi:

foreach (var resource in context.Resources.Include(x => x.Variations))
{
/* ... */
}

alebo ak chcete, aby sa objekty zobrazovali iba vo vašom kontexte,

using System.Data.Entity;

context.Resources.Include(x => x.Variations).Load();

Pokiaľ je mi známe, neexistuje spôsob, ako vytvoriť kontext, aby sa účinok .Include sa vždy implicitne vykonáva pri vytváraní dotazu. Musíte ho zahrnúť do každého dotazu.


0 pre odpoveď č. 2

Keď to urobíte

context.Resources.Include(x => x.Variations);

dostanete zoznam objektov Resource. použitím .First() vám poskytne prvý zdroj v tomto zozname zdrojov.


0 pre odpoveď č. 3

V skratke: nazýva sa efektom inej entity loading "s, V rámci Entity Framework existujú tri rebríčky: lenivé, explicitné a netrpezlivo načítané prístupy, z ktorých si môžete vybrať, a použiť ich v kóde.

Inými slovami, Entity Framework podporuje tri spôsoby načítania príbuzných subjektov:

  • očakávané zaťaženie
  • lenivé zaťaženie
  • explicitné zaťaženie

Obe tri techniky uvedené vyššie sú podrobne diskutované v tomto článku - Prebieha načítavanie súvisiacich subjektov.

Nižšie uvedený fragment kódu používa netrpezlivo načítanie:

context.Resources.Include(x => x.Variations).First();

Zdá sa, že len prvý z nich pracuje pre mňa, ale nemôžem nájsť žiadne vysvetlenie, prečo je to potrebné?

Neskorší fragment kódu (ten bez .First()) nefunguje pre vás, pretože načítanie príbuzných subjektov je možné dosiahnuť pomocou očakávané zaťaženie (pozrite si vyššie uvedené nadmieru načítané osoby) alebo Spôsob zaťaženia:

context.Resources.Include(x => x.Variations).Load();
// or a sample like
// Load the posts related to a given blog
context.Entry(blog).Collection(p => p.Posts).Load();

edit: Ak sa z nejakého dôvodu zmätíte s lenivým načítaním, potom môžete túto možnosť použiť vypnúť v kontexte.

public MyContext()
{
this.Configuration.LazyLoadingEnabled = false;
}