2011-08-16 7 views
20

मैं एक कंपनी है कि एक पते वस्तु शामिल करने के लिए फ्लैट एसक्यूएल वापसी। एसक्यूएल रिटर्न फ्लैट है, और मैं सभी ऑब्जेक्ट्स लोड करने के लिए क्वेरी <> प्राप्त करने की कोशिश कर रहा हूं।व्यवसायिक -मल्टी-मैपिंग: नेस्टेड वस्तुओं

cnn.Query<Company,Mailing,Physical,Company>("Sproc", 
        (org,mail,phy) => 
        { 
         org.Mailing = mail; 
         org.Physical = phy; 
         return org; 
        }, 
        new { ListOfPartyId = stringList }, null, true, commandTimeout: null, 
        commandType: CommandType.StoredProcedure, splitOn: "MailingId,PhyscialId").ToList(); 

मुझे यकीन नहीं है कि मेरे पास स्प्लिटऑन सही है या नहीं। splitOn

सुझाव बहुत अच्छा होगा:

बहु मानचित्रण API का उपयोग करके जब आप splitOn परम सेट करते हैं तो आप से ईद पैरामीटर नाम अन्य कुंजी सुनिश्चित: मुझे संदेश मिल रहा।

test.cs में उदाहरण क्वेरी के लिए पैरामीटर के रूप में कोड के रूप में नहीं पूछते हैं। ये जरूरत

+1

क्या आप परिणाम सेट कॉलम पोस्ट कर सकते हैं जो स्पोक कॉल द्वारा लौटाए जाते हैं? आपको यह सुनिश्चित करने की ज़रूरत है कि स्प्लिटऑन में कॉलम परिणाम – bdowden

+2

मेलिंग आईडी वापस लौटाए गए हैं। Proc के सभी वापसी मूल्य वस्तुओं के गुण/फ़ील्ड हैं। – Arnej65

+1

डैपर में मल्टीमैपिंग के लिए सर्वश्रेष्ठ उत्तर। http://stackoverflow.com/questions/7472088/correct-use-of-multimapping-in-dapper/7478958#7478958 – CPhelefu

उत्तर

15

मेरे लिए यह काम करता है सही ... शायद एक टाइपो अद्यतन करने की?

मैं PhyscialId जो निश्चित रूप से एक की तरह लग रहा है देखते हैं।

class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Mailing Mailing { get; set; } 
    public Physical Physical { get; set; } 
} 

class Mailing 
{ 
    public int MailingId { get; set; } 
    public string Name { get; set; } 
} 

class Physical 
{ 
    public int PhysicalId { get; set; } 
    public string Name { get; set; } 
} 

public void TestSOQuestion() 
{ 
    string sql = @"select 1 as Id, 'hi' as Name, 1 as MailingId, 
     'bob' as Name, 2 as PhysicalId, 'bill' as Name"; 
    var item = connection.Query<Company, Mailing, Physical, Company>(sql, 
       (org, mail, phy) => 
       { 
        org.Mailing = mail; 
        org.Physical = phy; 
        return org; 
       }, 
        splitOn: "MailingId,PhysicalId").First(); 


    item.Mailing.Name.IsEqualTo("bob"); 
    item.Physical.Name.IsEqualTo("bill"); 

} 
+0

मुझे गलत समझा जाता है कि स्प्लिटऑन उन मानों द्वारा रिटर्न सेट को विभाजित कर रहा है। यह अब काम कर रहा है। हालांकि, मैं आपके ऊपर जैसा सटीक वाक्यविन्यास का उपयोग करने में सक्षम नहीं हूं। मैं शामिल हो CommandType, बफर झंडा आदि – Arnej65

+1

मैं सोच रहा था कि यह काम करेगा अगर डेटाबेस क्वेरी एक बाएँ बाहरी था देने के लिए की जरूरत है और शारीरिक जानकारी गैर existant/बातिल हो सकता है। क्या यह अभी भी काम करेगा? – Marko