복잡한 쿼리에 Dapper를 사용하여 이전에 NH에 있었던 손실 된 오버 헤드를 제거하려고합니다.Dapper가 매개 변수를 추가하지 않습니다.
나는 다음과 같은 쿼리 (이 상당히 축소 된 참고) 한 : 그래서 우리의 저장소를 통해이라고
SELECT DISTINCT *
FROM tasks t
WHERE t.initials = @UserInits
는 :
taskRepo.RawExec<TaskListItemDTO>(Query,new {UserInits = "SAS"})
는 DapperExec의 우리의 구현으로 구성
은 다음과 :
를public IEnumerable<T> RawExec<T>(string SQL, object param)
{
return _session.Connection.Query<T>(SQL,param);
}
하지만 Dapper는 매개 변수를 쿼리에 추가하지 않고 결과, 구문 오류가 발생합니다.
ODBC를 통해 Informix에 연결하는 데 도움이됩니다.
감사
업데이트 코드 샘플 : 작업에 매우 바쁜, 너무 오래 걸려서
죄송합니다! 다음은 sys.all_objects (systables?)를 param 값 1 또는 0으로 간단하게 쿼리해야하는 MS SQL (2008) Server의 샘플입니다. 그러나이 샘플에서는 ODBC가 명명 된 params를 사용하지 않으므로이 방법은 작동하지 않습니다 .
using Dapper;
using DapperSQL;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
namespace DapperTests
{
public class SQLEx
{
private OdbcConnection GetConnection()
{
var cnn = new OdbcConnection("DSN=ODBCSOURCE");
cnn.Open();
// wrap the connection with a profiling connection that tracks timings
return cnn;
}
public IEnumerable<object> DapperTest()
{
using (OdbcConnection conn = GetConnection())
{
return conn.Query("SELECT * FROM sys.all_objects where is_ms_shipped = ?", new { is_ms_shipped = 1 });
}
}
}
메모리에서 ODBC/ifx에는 명명 된 매개 변수에 많은 "문제"가 있습니다. * 표시된 쿼리는 모든 알기 쉬운 이름 인식 명령에서 작동해야합니다. * 실제 코드에 표시된 명령은 얼마나 가까운 거리에 있습니까? 표시된 코드가이 문제를 나타 냅니까? –
난 그냥 간단한 형태로 작동하도록 위의 코드를 시도했습니다 - 그리고 여전히 행운 : ( –
ODBC 연결에 대해 직접 작동 샘플 원시 코드를 포함 할 수 있습니다 –