/ / Entity Framework 4 dychtivý načítanie nefunguje vôbec! - entity-framework-4, entity

Entity Framework 4 drobné načítanie nefunguje vôbec! - entity-framework-4, entity

Konvertujem linq2sql na entitu frameworku.

Počas konverzie som potreboval previesťzaťaženie riadku linq2sql so zahrnutím pre načítanie odkvapu, ale nedočkavé načítanie nefunguje. Keď som použil profilovač, zistil som, že podriadené entity sú načítané, ku ktorým sú prístupné.

DataBaseEntities context = new V3C_DataBaseEntities();

context.Agents.Include("Account");

Agent ag = context.Agents.Where(x => x.Login_ID == "2").SingleOrDefault();

// here the account should have been loaded,
// but actually they are loaded with the line below this is executed.

Console.WriteLine(ag.Account.ID.ToString());

Ak to urobíte, funguje to dokonale, ale musím to urobiť spôsobom uvedeným v otázke.

var c = (from ag in context.Agents.Include("Account")
where ag.Login_ID == "2"
select ag).SingleOrDefault();

Chcel by som tiež typ bezpečný spôsob načítania detských subjektov.

odpovede:

4 pre odpoveď č. 1

Nemôžete to urobiť tak, ako ste napísali otázku musí použiť zahrnúť do dotazu, Pri transformácii z Linq2Sql na EF neexistuje žiadny plynulý spôsob. Musíte prijať nové rozhranie API a používať ho správne.

Môžete použiť iba toto:

var query = context.Agents.Include("Account");
Agent ag = query.Where(x => x.Login_ID == "2").SingleOrDefault();

Ak chcete typ bezpečne zahrnúť verziu, musíte si ju stiahnuť Entity Framework Feature CTP5 alebo napíš svoj vlastné rozšírenie.


0 pre odpoveď č. 2

Toto je váš dotaz, ktorý nevykonáva nedočkavé zaťaženie:

context.Agents.Include("Account");

Agent ag = context.Agents.Where(x => x.Login_ID == "2").SingleOrDefault();

Ak zmeníte dopyt na umiestnenie Include vo výraze verím, že získate požadované výsledky.

Agent ag = context.Agents
.Include("Account")
.Where(x => x.Login_ID == "2").SingleOrDefault();

Pri mojom testovaní a pozrel som sa na výsledný vygenerovaný SQL, prvý výraz sa nezapojil do súvisiacej tabuľky. tvoj Include sa ignoruje, pretože nie je súčasťou výrazu dotazu.