ORMLite 및 출력 매개 변수를 사용하는 ServiceStack MARS (다중 활성 결과 집합)

dapper mars ormlite-servicestack servicestack stored-procedures

문제

ServiceStack ORMLite는 훌륭합니다. 저는 일반적으로 1 : 1 클래스 모델 대신 데이터베이스를 구축하는 것이 의미가 있으므로 데이터베이스를 구축하는 것을 선호하는 ORM 사고 방식을 피했습니다. 그것은 내가 주변에서 어려움을 겪고있는 것처럼 보이는 몇 가지가 있습니다. 나는 그것이 단순히 내 무지가 빛나는 것이라고 확신합니다.

먼저:

ORMLite를 사용하여 여러 결과 세트를 관리하는 방법이 있습니까? Dapper를 사용하는 QueryMultiple 메서드를 사용할 수는 있지만 어떤 이유로 든 ServiceStack의 Dapper 구현을 사용하는 방법을 알아 내야합니다.

둘째:

ORMLite를 사용하여 저장 프로 시저 호출 내에서 출력 매개 변수를 반환하는 방법이 있습니까?

이론적으로 말하자면, 나는 MARS와 출력 매개 변수를 없애고 이상적으로는 이상적인 세계에 살고 싶습니다. :)

.NET Framework 4.5, SQL Server 2008 R2 및 ServiceStack 3.9.46을 사용하고 있습니다.

수락 된 답변

이것은 실제로 매우 간단하다는 것을 알 수 있습니다.

Dapper가 면도에 "포함" 되었다는 것을 나타내는 오해의 소지가있는 문서문서를 기반으로 Dapper가 본질적으로 포함 된 라이브러리의 일부 였음을 암시한다고 가정했습니다.

당신이 원한다면 웃어 라. 그러나 계몽되지 않은 우리들을 위해, 나는 Dapper 확장을 보여주는 방법을 개략적으로 설명 할 것이다. 여기에 마술이 있습니다.

패키지 관리자 콘솔을 사용하여 다음을 실행합니다.

Install-Package ServiceStack
Install-Package Dapper

서비스에 다음 using 문 (C #)을 추가합니다.

using ServiceStack.OrmLite;
using Dapper;

이제 Db 객체를 활용하면 OrmLite AND Dapper 메서드가 모두 존재하게됩니다.

출력 매개 변수를 얻으려면 다음과 같이 간단합니다.

var p = new DynamicParameters();

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

Db.Execute("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

response.outputStuff = p.Get<int>("@param3");

MARS를 관리하려면 (두 개의 결과 집합과 출력 매개 변수를 반환하는 SP가 있다고 가정)

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

var mars = Db.QueryMultiple("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

//firstSet contains the first result set
var firstSet = mars.Read().ToList();
//secondSet contains the second result set
var secondSet = mars.Read().ToList();

response.outputStuff = p.Get<int>("param3");

그것은 일단 당신이 마법을 아는 한 아름답게 간단합니다 :)

여기에 훨씬 더 복잡한 예가 있습니다.

바라기를 이것은 누군가 다른 사람을 돕고 그 (것)들에게 조금 시간을 절약한다.



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