Dapper는 저장 프로 시저로 강력하게 형식화 된 객체를 지원합니까?

dapper query-by-example stored-procedures

문제

기본적으로 exec MySproc @p1, @p2, @p3, @p4 등을 수동으로 사용할 필요없이 저장 프로 시저에 "좋은"Dapper 구문을 사용하고 싶지만 강력하게 전달할 수 있어야합니다. 다양한 속성이 설정된 유형이 지정된 객체를 만들고이 객체를 사용하여 매개 변수를 매핑합니다. 익명의 객체로이 작업을 수행 할 수 있다는 것을 알고 있지만, 필자가 생각하고있는 시나리오는 여러 필드를 검색 할 수있는 복잡한 검색 양식과 같을 것이며 해당 저장 프로 시저에는 많은 매개 변수가있을 수 있습니다 ).

이상적으로 나는 다음과 같이 할 수 있기를 바랄 것이다 :

var cust = new Customer();
cust.FirstName = ...
cust.LastName = ...

// using .NET 3.5 so need to use ugly syntax :(
var result = connection.Query<Customer>("MySproc", cust, null, false, null, CommandType.StoredProcedure).Single();

그러나 그것은 작동하지 않고 내 Customer 객체가 12 개 이상의 속성을 가질 수 있기 때문에 오류가 발생합니다.이 경우 두 개만 찾고 있습니다. Dapper는 모든 속성을 검사하고 값을 할당하는 것으로 보입니다. sproc에 해당 매개 변수가 없을 때이를 가정합니다.

PetaPoco (강하게 입력 된 객체 또는 익명 객체 전달)를 사용하여 이와 비슷한 작업을 수행 할 수 있지만 PetaPoco보다 좀 더 추상적 인 것을 찾고 있습니다.

내가 Dapper (또는 다른 micro-ORM에서 할 수있는 일은 NHibernate 나 중량 ORM을 사용할 수 없다)이거나, 같은 기능을 얻기 위해 간과하는 방법이 무엇인가? 12 개의 매개 변수가 될 수 있습니까?

수락 된 답변

매개 변수를 지정하려면 명시 적으로 수행해야합니다.

var dp = new DynamicParameters(); 
dp.Add("Id", cust.Id);
dp.Add("Name", cust.Name);
var result = connection.Query<Customer>("MySproc", 
         dp,
         null, 
         false, 
         null, 
         CommandType.StoredProcedure).Single();

우리는 procs에 대해 sp_help params sniff를 수행하지는 않지만 잠재적으로 그렇게하는 도우미를 빌드하고 실행할 수 있습니다. cust.ToProcParams('MySproc')

또는이 매개 변수를 동적으로 작성하려는 경우 사용할 수 있습니다.

var dp = new DynamicParameters(); 
dp.Add("Id", cust.Id);
dp.Add("Name", cust.Name);
var result = connection.Query<Customer>("MySproc", 
         dp,
         null, 
         false, 
         null, 
         CommandType.StoredProcedure).Single();

인기 답변

SQL Server를 사용하는 경우 Insight.Database를 확인하십시오. https://github.com/jonwagner/Insight.Database/wiki 저장 프로 시저쪽으로보다 지향적이고 SqlDeriveParameters를 사용하여 개체와 저장 프로 시저 간의 매핑을 결정합니다.

참고 : 현재 .NET 4.0이 필요합니다. 그러나 .NET 3.5 버전에 관심이 있다면 얼마나 힘든지 알 수 있습니다.




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