2016-02-10 22 views
11

Przeprowadzam migrację aplikacji do ASP.NET MVC Core i Entity Framework Core i znalazłem problem. Mam surowy zapytanie do jednostki jak tenSurowe kwerendy SQL i Entity Framework Core

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

Ale nie ma SqlQuery<T> w context.Database. Czy masz rozwiązanie tego problemu?

+0

jest 'dbContext' prawidłowo zainicjowany jako' Entities'? –

+0

@ MatchesMalone Tak, normalne zapytania LINQ działają poprawnie – Obin

+0

zobacz poniżej moją odpowiedź na temat użycia metody rozszerzającej do sparametryzowanego (lub nie) SQL. – iberodev

Odpowiedz

11

Pamiętaj, aby dodać using Microsoft.Data.Entity; , ponieważ istnieje metoda rozszerzenia, której możesz użyć.

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

Jeszcze lepiej, zamiast przy użyciu surowego SQL (na ryzyko ataków SQL injection) metoda ta FromSql pozwala używać kwerend parametrycznych jak:

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

Działa dobrze, ale jego dziwne zapytania SQL wywołania z określonego modelu jednostki, niż ogólnie bazy danych. O atakach iniekcyjnych wiem i używam parametrów SQL, ale chciałem pokazać prosty problem na przykładzie. Dzięki – Obin

+0

@ iberodev Jak zrobiłbyś to, jeśli zapytanie sql zawiera dwie tabele? – nam

+0

@nam jak pokazano tutaj: https://docs.efproject.net/en/latest/querying/raw-sql.html#composing-with-linq przez dodanie ".Include (b => b.Posts)" dołączasz do innej tabeli – iberodev

Powiązane problemy