È possibile eseguire query SQL personalizzate utilizzando EF7

c# entity-framework-core

Domanda

Ho deciso di spostare uno dei miei progetti in Entity Framework 7 (rc1-final). Mi rivolgo a SQL Server e viene installato anche il pacchetto EntityFramework.MicrosoftSqlServer .

Ho solo un problema: sembra che non riesca a eseguire query SQL personalizzate per recuperare alcuni oggetti dal DB.

DatabaseFacade oggetto DatabaseFacade (a cui è possibile accedere tramite la proprietà DbContext.Database ) fornisce un metodo di estensione ExecuteSqlCommand (che non restituisce nulla), ma non fornisce il SqlQuery<T> che consente di recuperare oggetti. Entrambi i metodi erano disponibili nel vecchio EF 6, ma il nuovo EF 7 dichiara solo il primo.

Quindi, il metodo SqlQuery<T> è ancora qui (ma spostato / rinominato) o è stato completamente rimosso dalla nuova implementazione EF?

Ovviamente è assolutamente possibile risolverlo in modo dettagliato (usando SqlCommand e il suo metodo ExecuteReader ) ma preferisco evitarlo.

Risposta accettata

EntityFramework.Relational espone il seguente metodo di estensione;

public static IQueryable<TEntity> FromSql<TEntity>(
        [NotNull] this IQueryable<TEntity> source,
        [NotNull] [NotParameterized] string sql,
        [NotNull] params object[] parameters)
        where TEntity : class

Quindi puoi farlo;

myDatabaseContext.Customers.FromSql("SELECT * FROM Customers WHERE Name='p0'", "timothy");

Risposta popolare

Per eseguire una query SQL personalizzata in EF7, è possibile creare una tabella "simulata" che restituisce la struttura della struttura della query SQL.

Esempio: la tua query è: "seleziona aA, bB da A, B dove a.b_id = b.id" . La tabella falsa conterrà 2 colonne come A, B. Nel tuo programma, puoi farlo:

var result = myDatabaseContext.FakeTables.FromSql("select a.A, b.B from A,B where a.b_id=b.id");



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché