2016-02-10 14 views
11

Ich migriere meine Anwendung auf ASP.NET MVC Core und Entity Framework Core und ich habe ein Problem gefunden. Ich habe rohe SQL-Abfrage Entität wie dieseRaw SQL-Abfragen und Entity Framework Core

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

Aber es gibt keine SqlQuery<T> in context.Database. Haben Sie eine Lösung für dieses Problem?

+0

Ist 'dbContext' richtig als' Entities' initialisiert? –

+0

@MatchesMalone Ja, normale LINQ-Abfragen funktionieren ordnungsgemäß – Obin

+0

Siehe meine Antwort unten zur Verwendung einer Erweiterungsmethode, um parametrisiertes (oder nicht) SQL zu verwenden. – iberodev

Antwort

11

Stellen Sie sicher, dass Sie using Microsoft.Data.Entity; hinzufügen, da es eine Erweiterungsmethode gibt, die Sie verwenden können.

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

Noch besser ist, statt roh SQL verwenden (bei Gefahr von SQL-Injections-Attacken) diese FromSql Methode ermöglicht es Ihnen, wie parametrisierte Abfragen zu verwenden:

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

Gut funktioniert, aber es seltsam SQL-Abfragen von bestimmten Entity-Modell als in der Regel Datenbank. Über Injektionsangriffe weiß ich, und ich verwende SQL-Parameter, aber ich wollte einfaches Problem im Beispiel zeigen. Danke – Obin

+0

@iberodev Wie würden Sie es tun, wenn Ihre SQL-Abfrage zwei Tabellen enthält? – nam

+0

@nam wie hier gezeigt: https://docs.efproject.net/en/latest/querying/raw-sql.html#composing-with-linq durch Hinzufügen eines '.Include (b => b.Posts)' Sie verbinden sich mit einer anderen Tabelle – iberodev