Dapper.NET 및 저장된 proc(여러 결과 세트 포함)
대퍼를 사용할 수 있는 방법이 있습니까?여러 결과 세트를 반환하는 저장된 프로시저가 있는 NET?
이 경우 첫 번째 결과 집합은 단일 열이 있는 단일 행입니다.0
그러면 호출이 성공적으로 완료되고 두 번째 결과 집합에는 해당 데이터의 실제 행/테이블이 포함됩니다. (그리고 0이 아닐 경우 오류가 발생하여 두 번째 결과 집합이 제공되지 않습니다.)
대퍼와 함께 이 일을 처리할 수 있는 기회.NET? 지금까지, 나는 오직 그 싱글을 돌려받을 뿐입니다.0
그 이상은 아닙니다.
업데이트: 좋아요. 결과 집합 2가 단일 엔터티인 한 작동합니다.
Dapper.SqlMapper.GridReader reader =
_conn.QueryMultiple("sprocname", dynParams,
commandType: CommandType.StoredProcedure);
int status = reader.Read<int>().FirstOrDefault();
MyEntityType resultObj = reader.Read<MyEntityType>().FirstOrDefault();
자, 저는 또 다른 요구사항이 있습니다.
두 번째 결과 집합에 대한 Dapper의 다중 매핑(SQL Server에서 반환된 단일 행을 두 개의 별도 엔티티로 분할)은 아직 지원되지 않는 것 같습니다(적어도 오버로드는 없는 것 같습니다)..Read<T>
다중 프로토콜)을 처리할 수 있습니다.
어떻게 하면 그 행을 두 개의 엔티티로 나눌 수 있습니까?
QueryMultiple
에서는 여러 결과 집합을 처리하는 기능을 지원합니다.우리가 추가한 유일한 설계 제한 사항은 그리드 리더의 버퍼링을 완전히 비활성화하는 것이었습니다.이것은 전체 API가 스트리밍되고 있음을 의미합니다.
가장 간단한 경우에는 다음을 사용할 수 있습니다.
var grid = connection.QueryMultiple("select 1 select 2");
grid.Read<int>().First().IsEqualTo(1);
grid.Read<int>().First().IsEqualTo(2);
조금 더 복잡한 경우에는 다음과 같은 놀라운 작업을 수행할 수 있습니다.
var p = new DynamicParameters();
p.Add("a", 11);
p.Add("r", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
connection.Execute(@"create proc #spEcho
@a int
as
begin
select @a Id, 'ping' Name, 1 Id, 'pong1' Name
select @a Id, 'ping' Name, 2 Id, 'pong2' Name
return @a
end");
var grid = connection.QueryMultiple("#spEcho", p,
commandType: CommandType.StoredProcedure);
var result1 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
(a, b) => Tuple.Create((object)a, (object)b)).ToList();
var result2 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
(a, b) => Tuple.Create((object)a, (object)b)).ToList();
((int)(result1[0].Item1.Id)).IsEqualTo(11);
((int)(result1[0].Item2.Id)).IsEqualTo(1);
((int)(result2[0].Item1.Id)).IsEqualTo(11);
((int)(result2[0].Item2.Id)).IsEqualTo(2);
p.Get<int>("r").IsEqualTo(11);
QueryMultiple을 활성화하려면 이 문을 사용하여 추가해야 합니다.
using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */
사용해 보셨습니까?QueryMultiple
방법?다음과 같이 표시됩니다.
여러 결과 집합을 반환하는 명령을 실행하고 각 결과 집합에 차례로 액세스합니다.
QueryMultiple을 활성화하려면 이 문을 사용하여 추가해야 합니다.
using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */
다중 결과 집합입니다.
var reader = conn.QueryMultiple("ProductSearch", param: new { CategoryID = 1 }, commandType: CommandType.StoredProcedure);
var ProductListOne = reader.Read<ProuductTbl>().ToList();
var ProductListTwo = reader.Read<ProuductTbl>().ToList();
QueryMultiple을 활성화하려면 이 문을 사용하여 추가해야 합니다.
using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */
저장 프로시저:
CREATE PROCEDURE [dbo].[ProductSearch]
@CategoryID as int
AS
BEGIN
SELECT * FROM ProductTbl
SELECT * FROM ProductTbl
END
언급URL : https://stackoverflow.com/questions/6317937/dapper-net-and-stored-proc-with-multiple-result-sets
'source' 카테고리의 다른 글
프로그래밍 방식으로 Swift의 이전 View 컨트롤러로 돌아가기 (0) | 2023.05.07 |
---|---|
pg_dump를 제대로 인증하려면 어떻게 해야 합니까? (0) | 2023.05.07 |
애플리케이션 인사이트 - 사용자 정의 차원별 정렬 방법 (0) | 2023.05.07 |
핸들 바:부모의 "소유 속성"이 아니기 때문에 "출처" 속성을 확인하기 위한 액세스가 거부되었습니다. (0) | 2023.05.07 |
사용자 입력 및 명령줄 인수 (0) | 2023.05.07 |