Dapper에서 각 db 호출에 대해 반복되는 코드를 숨기려고 래퍼를 작성하려고합니다. (즉, SQL 연결, 시도, 기본 잡기 및 마침내) 본질적으로 나는 다음 코드와 같은 것을하고 싶습니다만, 나는이 방법으로 generics int를 사용할 수없는 동적 매개 변수가 있다는 것을 이해합니다.제네릭 및 동적 인수에 대한 해결 방법
가되는 방법 나는 오류를 얻을 :
Consider casting the dynamic arguments or calling the extension method without the extension method syntax (refering to the conn.Query method)
작동 좋아 내 ExecuteQuery
또는 뭔가를 리팩토링하는 방법이 있나요?
public abtract class IDbAccessService
{
public LogService Logger { get; set; }
public virtual IEnumerable<T> ExecuteQuery<T>(string sql, dynamic param, string connString)
where T : BaseModel
{
using (var conn = DataAccessHelpers.GetOpenConnection(connString))
{
try
{
return conn.Query<T>(sql, param).ToList<T>();
}
catch (Exception ex)
{
Logger.Logger.Error(ex.Message, ex);
throw ex;
}
}
}
}
'그건. 'Close()'와'Dispose()'도 똑같은 일을합니다 (적어도 대개는 Dapper를 모르겠습니다). 그리고'using'은 한번 더'Dispose()'를 호출 할 것입니다. – svick
질문과는 관계가 없지만'finally' 블록은 필요 없다고 생각합니다.'사용'은 이미 연결을 폐기 (그리고 닫음)하는 것을 처리합니다. – MiMo
@svick이 동의하고'catch '도 쓸모가 없습니다. 로그 항목을 만들고 스택 추적없이 예외를 throw하여 나중에 다시 로그에 기록합니다. –