2011-07-19 10 views
11

के साथ एक एकल एसपी से एकाधिक रिकॉर्ड मैप करने के लिए कैसे करें मैं एक ऐसी स्थिति में डैपर का उपयोग करना चाहता हूं जहां एक संग्रहीत प्रक्रिया का निष्पादन 50 अलग-अलग चयनों को वापस कर देगा, व्यक्तिगत परिणाम सेट में से कोई भी नहीं होगा बहुत व्यापक हो, शायद 20 या 30 कॉलम अधिकतर हो। नीचे दिया गया कोड डैपर टेस्ट से है और मैं सोच रहा हूं कि यह उदाहरण उपयोग करने के लिए एक अच्छा प्रोटोटाइप है।डैपर-डॉट-नेट

, धन्यवाद स्टीफन

public void TestMultiMap() 
     { 
      var createSql = @" 
       create table #Users (Id int, Name varchar(20)) 
       create table #Posts (Id int, OwnerId int, Content varchar(20)) 

       insert #Users values(99, 'Sam') 
       insert #Users values(2, 'I am') 

       insert #Posts values(1, 99, 'Sams Post1') 
       insert #Posts values(2, 99, 'Sams Post2') 
       insert #Posts values(3, null, 'no ones post')"; 

       connection.Execute(createSql); 

      var sql = @"select * from #Posts p 
         left join #Users u on u.Id = p.OwnerId 
         Order by p.Id"; 

      var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post; }).ToList(); 
      var p = data.First(); 

      p.Content.IsEqualTo("Sams Post1"); 
      p.Id.IsEqualTo(1); 
      p.Owner.Name.IsEqualTo("Sam"); 
      p.Owner.Id.IsEqualTo(99); 

      data[2].Owner.IsNull(); 

      connection.Execute("drop table #Users drop table #Posts"); 
    } 

संपादित

यहां नमूने मार्क्स उत्तर के आधार पर है।

 const string sql = @"__sp_GetMISMOLoanInfo"; 
     using (var multi = _connection.QueryMultiple(sql, new { loannum = "3192381" }, commandType: CommandType.StoredProcedure)) 
     { 
      var address = multi.Read<ADDRESS>().Single(); 
      var amortizationRule = multi.Read<AMORTIZATION_RULE>().Single(); 
      var appraiserLicense = multi.Read<APPRAISER_LICENSE>().Single(); 
      var automatedUnderwriting = multi.Read<AUTOMATED_UNDERWRITING>().Single(); 
      var avm = multi.Read<AVM>().Single(); 
      var borrowerDetail = multi.Read<BORROWER_DETAIL>().Single(); 
     } 
+0

एसपी कहां है? विशेष रूप से, यह एक * चौड़ा * परिणाम है, या एकाधिक अलग चयन? व्यवसायिक के साथ दोनों काम करते हैं, लेकिन वाक्य रचना दो लेआउट –

+0

के बीच अलग (मैं जानता हूँ कि यह सिर्फ एक उदाहरण था, लेकिन एक तालिका चर में बेहतर हो सकता है, Btw) –

+0

मार्क है, मैं पोस्ट अपने प्रश्नों को प्रतिबिंबित करने के संपादित कर लिया है । –

उत्तर

22

यह एक मुख पृष्ठ से है, लेकिन टेस्ट मैचों में समान होनी चाहिए: सामान्य रूप में

var sql = @"..."; 
using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) 
{ 
   var customer = multi.Read<Customer>().Single(); 
   var orders = multi.Read<Order>().ToList(); 
   var returns = multi.Read<Return>().ToList(); 
   ... 
} 

तर्क आदि काम है, और अगर CommandType निर्दिष्ट किया जाता है सीधे परिभाषित पैरामीटर नाम करने के लिए नक्शे चाहिए।

.Read<T>() पर प्रत्येक कॉल एक लगातार परिणाम ग्रिड से संबंधित है।

+0

मार्क, मैं पैरामीटर कैसे पास करूं? प्रक्रिया या कार्य '__sp_GetMISMOLoanInfo' पैरामीटर '@loannum' की अपेक्षा करता है, जो आपूर्ति नहीं की गई थी। –

+0

@SPATEN क्या आपने पास किया था, उदाहरण के लिए, एक 'नया {loannum = yourValue}'? –

+0

हां, बस कोड के रूप में चिपकाए गए कोड की तरह। मैंने इसे एक स्ट्रिंग भी सेट किया है क्योंकि यह हमारा 'ऋण संख्या' डेटा प्रकार है। प्रक्रिया बनाएं [डीबीओ]। [__ sp_GetMISMOLoanInfo] \t @loannum varchar (15) –