2017-03-23 2 views
0

私はEFを使用したくないため、DataBuilderがサポートされていないため、Asp.NetCoreアプリケーションでNReco.Dataを使用してdb呼び出しを行いますまだ。Asp.NetCoreでNReco.Dataを使用してStoredProcedureから複数のRecordSetを取得する方法

私はStoredProcedureを呼び出し、複数のレコードセット(または辞書リスト)を取得する必要があります。私はこれを呼び出した時点では

dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()

しかし、保存は私より1つのレコードを与え、誰もが他人を得るために私を助けることができますか?

答えて

0

現在、NReco.Data.DbDataAdapterには、単一のIDbCommandによって返された複数の結果セットを処理するAPIはありません。

あなたは、自分でIDbCommandを構成するデータリーダーを実行し、次のように複数の結果セットを読み取ることができます。NReco.Dataの作者として

IDbCommand spCmd; // lets assume that this is DB command for 'STOREDNAME' 
RecordSet rs1 = null; 
RecordSet rs2 = null; 
spCmd.Connection.Open(); 
try { 
    using (var rdr = spCmd.ExecuteReader()) { 
     rs1 = RecordSet.FromReader(rdr); 
     if (rdr.NextResult()) 
      rs2 = RecordSet.FromReader(rdr); 
    } 
} finally { 
    spCmd.Connection.Close(); 
} 

私は複数の結果セットのサポートは簡単DbDataAdapterに添加してもよいと思いますAPI(私はちょうどgithubにissue for thatを作成しました)。

- UPDATE - 以下のように複数の結果セットを処理することが可能であるNReco.Dataのv.1.0.2から出発

(var companies, var contacts) = DbAdapter.Select("exec STOREDNAME").ExecuteReader( 
    (rdr) => { 
    var companiesRes = new DataReaderResult(rdr).ToList<CompanyModel>(); 
    rdr.NextResult(); 
    var contactsRes = new DataReaderResult(rdr).ToList<ContactModel>(); 
    return (companiesRes, contactsRes); 
    }); 

同様にDataReaderResult必要に応じて結果を辞書やRecordSetにマップできます。

関連する問題