Ho questa struttura della tabella veramente di base:LINQ to Entities - eager loading usando Include()
dbo.tblCategory
dbo.tblQuestion (molti a uno rapporto con tblCategory)
dbo.tblAnswer (rapporto molti a uno con tblQuestion)
Quindi, in pratica, quello che sto cercando di fare è quando carico una categoria, voglio anche caricare tutte le domande e tutte le risposte.
Ora, io sono stato in grado di farlo utilizzando il seguente codice:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include("tblQuestion")
.Include("tblQuestion.tblAnswers")
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
}
Tuttavia, io non sono completamente innamorato con questo; se i nomi delle relazioni cambiano nel mio modello; Non ho intenzione di ottenere un errore durante la costruzione del progetto. Idealmente, mi piacerebbe usare un'espressione lambda; qualcosa del genere:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include(t => t.tblQuestion)
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
Ora, con il frammento di cui sopra; Sono bloccato su come eseguire il drill down nella tabella delle risposte. Qualche idea su cosa potrei usare per un'espressione lambda per questo?
Linq to Entities in .NET 4.0 supporta il caricamento lazy (abilitato per impostazione predefinita) per quanto ne so. Non dovevi preoccuparti di questo allora. =) – Jens
Supponendo che siamo su 4.0. Stiamo ancora utilizzando 3.5 per il momento =) –
possibile duplicato di [Entity Framework .Include() con il controllo del tempo di compilazione?] (Http://stackoverflow.com/questions/2921119/entity-framework-include-with- compila-time-checking) –