SQLite를 SQL 서버용 메모리 데이터베이스로 사용

c# dapper sqlite sql-server unit-testing

문제

내 설치 프로그램은이 lib ( https : // github )를 사용하여 메모리 내 SQLite ( http://mikhail.io/2016/02/unit-testing-dapper-repositories/ )를 사용하여 SQL Server에 대한 dapper 호출을 테스트하는 것과 비슷합니다 . com / ServiceStack / ServiceStack.OrmLite

내 DAL에 ad hoc SQL을 사용하여 dapper를 사용 중이며 SQL Server에 의존하지 않고 데이터 액세스 계층을 테스트하려고했습니다. SQLite in-memory 데이터베이스를 사용했습니다. 문제는 SQL 구문은 SQL Server와 SQLite간에 서로 다릅니다.

예를 들어, 다음을 사용하여 페이지 된 결과를 반환하는 쿼리가 있지만 SQLite는 제한 및 오프셋 만 지원합니다.

메모리 단위 테스트에서 제게 해줄 제안이 있으면 어떻게합니까? 나는 dapper가 더 성능이 좋고 SQL을 테스트하고 싶을 때 스토어드 프로 시저를 사용하지 않으려 고 조롱 한 db 컨텍스트와 함께 EF 라우트를 가지지 않았다. 나는 데이터베이스 호출을 조롱하고 싶지 않다.

인기 답변

Ormlite의 Typed API는 RDBMS에 독립적입니다. 따라서 OrmLite의 Typed API를 사용하는 한 연결 문자열 및 방언 제공자를 변경하여 다른 데이터베이스간에 쉽게 대체 할 수 있습니다. 예 :

//SQL Server
var dbFactory = new OrmLiteConnectionFactory(connectionString,  
    SqlServerDialect.Provider);

//InMemory Sqlite DB
var dbFactory = new OrmLiteConnectionFactory(":memory:", 
    SqliteDialect.Provider); 

그런 다음 두 데이터베이스 중 하나를 사용하여 POCO를 생성하고 유지하며 쿼리 할 수 ​​있습니다. 예 :

using (var db = dbFactory.Open())
{
    db.DropAndCreateTable<Poco>();
    db.Insert(new Poco { Name = name });
    var results = db.Select<Poco>(x => x.Name == name);
    results.PrintDump();
}

그러나 사용자 지정 SQL API를 사용하여 MSSQL 관련 SQL 을 실행하면 SQLite에 대해 실행할 수 없습니다. OrmLite 에서 mockable 지원을 사용할 수는 있지만 OrmLite의 RDBMS 불가지론 형 API 대신에 개인적으로 권장합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.