이번 닷넷 컨퍼런스에서 안현모님께서 발표하신 SQLKATA
자료를 보고 저것다 필이 와서 바로 프로젝트에 적용해봤습니다.
사용법도 쉽고 그동안 ORM 과 Procedure 서로 맹점이 있었습니다.
- EF ORM 을 쓰면 스키마 변경이 어렵다 (DB 퍼스트 하고 체계적인 배포 관리가 되면
되겠지만 현실은…) - DB 스키마 수동 변경시 컴파일이 필요하다
- Procedure 사용시 비지니스 로직이 분산되고 파악이 안된다
- Procedure 사용시 쿼리 버전 관리가 안된다.
- 다양한 DB 메이커에 대응이 어렵다.
- EF LINQ 가 생성하는 쿼리는 예측이 안되서 ? 디버깅이 어렵다.
등등 막상 실무에서 사용하기에는 개인적으로 맹점이 많았습니다.
하지만 SQLKATA 는 Linq 로 쿼리를 만들면 ? 그다음 DB 메이커에 따라
Query 를 자동생성해줍니다.
var query = _queryFactory.Query("EXTERNAL_IF_TABLE")
.Where("Delyn", false).Where("UseYn", true)
.Select("TableID", "TableNm", "FILE_NM");
var compiledQuery = _queryFactory.Compiler.Compile(query);
var result = await connection.QueryAsync<EXTERNALIFTABLE_Model>(compiledQuery.Sql, compiledQuery.NamedBindings);
대략 이런식으로
var query = _queryFactory.Query(“EXTERNAL_IF_TABLE”)
.Where(“Delyn”, false).Where(“UseYn”, true)
.Select(“TableID”, “TableNm”, “FILE_NM”);
이렇게 LINQ 방식으로 쿼리를생성하고
var compiledQuery = _queryFactory.Compiler.Compile(query);
사전에 정의된 DB 메이커에 맞는 쿼리 Compile
await connection.QueryAsync<EXTERNALIFTABLE_Model>(compiledQuery.Sql, compiledQuery.NamedBindings);
쿼리 사용 ? 이때 compiledQuery.Sql 컴파일된 생쿼리가 들어있어 LOG 를 남기거나
디버깅 하기 용이합니다.
SQLKATA+DAPPER 조합이라면 천하무적인것 같군요
다양한 DB와 잦은 스키마 변경에 시달리는 업무라면 도입해도 좋을것 같습니다.