Vorrei recuperare dall'oggetto complesso del database utilizzando una singola query. Diamo un'occhiata al seguente esempio:Recupero di oggetti complessi mediante query SQL non elaborata in Entity Framework
SELECT TableA.*, TableB.*
FROM TableA
INNER JOIN TableA.B_Id = TableB.Id
e classi corrispondenti:
public class QueryResult
{
public TableA A { get; set; }
public TableB B { get; set; }
}
public class TableA
{
public int Id { get; set; }
public string SomeContentA { get; set; }
public int B_Id { get; set; }
}
public class TableB
{
public int Id { get; set; }
public int SomeContentB { get; set; }
}
Vorrei eseguire la query SQL prime dall'alto sul database e ottenere raccolta di QueryResult oggetti con impostato correttamente A e Proprietà B Finora ho provato ad utilizzare il metodo sqlquery, ma sono riuscito solo per ottenere la raccolta di QueryResult gli oggetti con valori nulli in A e le proprietà B (set di risultati apparentemente restituito non è stato binded correttamente per immobili):
var results = ctx.Database.SqlQuery<QueryResult>(\\example_query).ToList();
notare che:
- Non è consigliabile elencare le colonne manualmente nell'istruzione SELECT. È probabile che le tabelle TableA e TableB e le tabelle SQL cambino nel tempo, ma tali modifiche saranno coerenti.
- Tre query (una per recuperare gli ID da TableA e TableB, la seconda per recuperare gli oggetti da TableA, la terza per gli oggetti da TableB) danneggerà le prestazioni e dovrei provare ad evitarlo se possibile.
sto utilizzando Entity Framework 4.3 e SQL Server 2012.
Grazie, arte
è il 'B_Id' una chiave esterna reale qui? Se è così, c'è un motivo per cui non stai facendo riferimento a un 'TableB' nel tuo' TableA', quindi puoi caricarlo tramite EF, piuttosto che usare SQL raw? – Thewads
No, non lo è, l'ho appena aggiunto all'esempio per usare un join. Dispiace per la confusione. Nel problema attuale non vi è alcuna relazione tra TableA e TableB e non vi è alcuna opzione per sostituire il codice con costruzioni EF regolari. –
C'è un motivo per utilizzare EF4.x? Hai pensato di passare a 6.x? Inoltre, hai accesso per creare un SProc nel DB per eseguire l'unione complessa? – GoldBishop