728x90
반응형
EF Core는 RDB에서 SQL 쿼리를 사용하도록 허용한다. LINQ를 사용할 수 없거나 비효율적인 SQL이 생성되는 경우 또는 keyless entity type이나 regular entity types을 반환하는 경우 사용할 수 있다.
Basic SQL queries
1. FromSql
public static System.Linq.IQueryable<TEntity> FromSql<TEntity> (this Microsoft.EntityFrameworkCore.DbSet<TEntity> source, FormattableString sql) where TEntity : class;
interpolated string 으로 SQL query에 기반한 LINQ query를 만든다.
EF Core 7.0에서 도입되었으며, 이전 버전 사용 시 FormSqlInterpolated 함수를 사용한다.
DbSet에서 바로 사용되며, 임의의 LINQ query를 사용할 수 없다.
entity data를 반환하는 쿼리나 SP를 실행할 수 있다.
SQL injection에 안전하다.
var blogs = context.Blogs
.FromSql($"SELECT * FROM dbo.Blogs")
.ToList();
var blogs = context.Blogs
.FromSql($"EXECUTE dbo.GetMostPopularBlogs")
.ToList();
// string interpolation 사용
var user = "johndoe";
var blogs = context.Blogs
.FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}")
.ToList();
//optional parameter를 갖는경우, named parameter를 사용한다.
var user = new SqlParameter("user", "johndoe");
var blogs = context.Blogs
.FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser @filterByUser={user}")
.ToList();
//database parameter를 사용할때
var user = new SqlParameter("user", "johndoe");
var blogs = context.Blogs
.FromSql($"EXECUTE dbo.GetMostPopularBlogsForUser {user}")
.ToList();
2. FromSqlRaw
public static System.Linq.IQueryable<TEntity> FromSqlRaw<TEntity> (this Microsoft.EntityFrameworkCore.DbSet<TEntity> source, string sql, params object[] parameters) where TEntity : class;
raw SQL query에 기반한 LINQ query를 만든다.
entity data를 반환하는 쿼리나 SP를 실행할 수 있다.
dynamic한 query를 사용하고 싶은 경우, FromSqlRaw를 사용한다. argument로 parameter value를 전달하며, interpolated string을 사용하여 값을 전달하지 않는다. interpolated string을 사용하면 SQL injection공격에 취약하다.
var columnName = "Url";
var columnValue = new SqlParameter("columnValue", "http://SomeURL");
var blogs = context.Blogs
.FromSqlRaw($"SELECT * FROM [Blogs] WHERE {columnName} = @columnValue", columnValue)
.ToList();
var columnValue = "http://SomeURL";
var blogs = context.Blogs
.FromSqlRaw($"SELECT * FROM [Blogs] WHERE Url = {0}", columnValue)
.ToList();
3. FormSqlInterpolated
interpolated string 으로 SQL query에 기반한 LINQ query를 만든다.
4. ExcuteSqlRaw
entity data를 반환하는 않는 쿼리나 SP를 실행할 수 있다.
728x90
반응형
'Entity Framework Core' 카테고리의 다른 글
ASP.NET Core] Entity Framework Core - Migrations (0) | 2023.05.24 |
---|---|
ASP.NET Core] Entity Framework Core - database model 구성방법 (0) | 2023.05.23 |
ASP.NET Core] Entity Framework Core란? (1) | 2023.05.23 |
ASP.NET Core] Entity Framework Core - 2. One To Many (0) | 2022.02.08 |
ASP.NET Core] Entity Framework Core - 1. MSSQL DB 연동 (0) | 2021.12.24 |
댓글