2016-02-10 8 views
11

Eseguo la migrazione dell'applicazione su ASP.NET MVC Core e Entity Framework Core e ho riscontrato un problema. Ho query SQL prima al soggetto come questoQuery SQL non elaborate e Entity Framework Core

var rawSQL = dbContext.Database.SqlQuery<SomeModel>("Raw SQL Query").ToList(); 

Ma non c'è SqlQuery<T> in context.Database. Hai una soluzione per questo problema?

+0

è 'dbContext' inizializzato correttamente come' enti di tali? –

+0

@MatchesMalone Sì, le normali query LINQ funzionano correttamente – Obin

+0

vedere la mia risposta di seguito su come utilizzare un metodo di estensione per utilizzare SQL parametrizzato (o non). – iberodev

risposta

11

Assicurati di aggiungere using Microsoft.Data.Entity; perché esiste un metodo di estensione che è possibile utilizzare.

var rawSQL = dbContext.SomeModels.FromSql("your SQL"); 

Ancora meglio, invece di usare SQL prime (a rischio di attacchi SQL injection) questo metodo FromSql consente di utilizzare query con parametri come:

dbContext.SomeModels.FromSql("SELECT * FROM dbo.Blogs WHERE Name = @p0", blogName); 
+0

Funziona bene, ma le sue strane query SQL di chiamata da un modello di entità specifico rispetto al database generale. Sugli attacchi di iniezioni so e sto usando i parametri SQL ma volevo mostrare un semplice problema, ad esempio. Grazie – Obin

+0

@iberodev Come lo faresti se la tua query sql contiene due tabelle? – nam

+0

@nam come mostrato qui: https://docs.efproject.net/en/latest/querying/raw-sql.html#composing-with-linq aggiungendo un '.Include (b => b.Post)' ti stai unendo con un'altra tabella – iberodev