
Entity Framework Core 고급
Raw SQL, stored procedures, 트랜잭션, AsNoTracking, AsSplitQuery, query tags, interceptors, 성능 튜닝
1EF Core에서 엔티티를 가져오기 위해 raw SQL 쿼리를 실행하려면 어떻게 해야 하나요?
EF Core에서 엔티티를 가져오기 위해 raw SQL 쿼리를 실행하려면 어떻게 해야 하나요?
답변
FromSql() 또는 FromSqlRaw() 메서드를 사용하면 DbContext가 추적하는 엔티티를 반환하면서 raw SQL 쿼리를 실행할 수 있습니다. 이는 stored procedure나 테이블 반환 함수 호출처럼 LINQ로 쿼리를 직접 표현할 수 없는 시나리오에 유용합니다. 이후 결과를 LINQ와 결합하여 필터를 추가하거나 관계를 포함할 수 있습니다.
2EF Core에서 FromSqlRaw()와 ExecuteSqlRaw()의 차이점은 무엇인가요?
EF Core에서 FromSqlRaw()와 ExecuteSqlRaw()의 차이점은 무엇인가요?
답변
FromSqlRaw()는 추적되는 엔티티를 반환하는 SELECT 쿼리를 실행하는 데 사용되며 LINQ와의 결합이 가능합니다. ExecuteSqlRaw()는 비쿼리 명령(INSERT, UPDATE, DELETE)을 실행하는 데 사용되며 영향을 받은 행 수를 반환합니다. FromSqlRaw()는 DbSet에 적용되고, ExecuteSqlRaw()는 Database에 적용됩니다. 이 구분은 타입 안전성과 모델 일관성을 보장합니다.
3EF Core에서 엔티티를 반환하는 stored procedure를 호출하려면 어떻게 해야 하나요?
EF Core에서 엔티티를 반환하는 stored procedure를 호출하려면 어떻게 해야 하나요?
답변
stored procedure를 호출하고 결과를 엔티티에 매핑하려면 FromSqlRaw() 또는 Database.SqlQuery<T>()를 사용합니다. 호출 후 AsEnumerable()을 추가하는 것이 매우 중요한데, 이는 EF Core가 stored procedure 결과에 대해 구성을 시도하여 SQL 구문 오류를 일으키는 것을 방지하기 위함입니다. SQL 인젝션을 방지하기 위해 @p0, @p1 구문을 사용하여 매개변수를 전달할 수 있습니다.
EF Core에서 AsNoTracking()의 역할은 무엇인가요?
AsNoTracking() 대신 AsNoTrackingWithIdentityResolution()을 사용해야 하는 경우는 언제인가요?
+22 면접 질문