2012-02-25 13 views
6

मेरे पास BookId, AuthorId, आदि जैसे आईडी कॉलम वाले डेटाबेस हैं। हालांकि, मेरी कोड फ़ाइलों में, केवल आईडी आईडी है। मैं प्रोग्राम के कुछ हिस्सों को परिवर्तित करने का प्रयास कर रहा हूं जो डीएपर के साथ एनएचबेर्नेट का उपयोग करते हैं, इसलिए मैं एक आईडी और बुकआईड संपत्ति दोनों की आवश्यकता को खत्म करने की कोशिश कर रहा हूं। NHibernate को पहचान मानचित्र में बनाया गया है जो बुक ऑब्जेक्ट्स को बुक ऑब्जेक्ट्स की आईडी प्रॉपर्टी पर नक्शा करता है और इसी तरह लेखक ऑब्जेक्ट पर आईडी आईडी के लिए लेखक आईडी।एक पहचान कॉलम को कैसे मैप करें, जिसका अलग नाम है, डैपर के साथ?

एसक्यूएल क्वेरी में कॉलम को उपनाम देने के बाहर, इस डैपर को करने का कोई तरीका है?

public class Book { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Author { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

एक नमूना क्वेरी है कि मैं कैसी लगती है उपयोग कर रहा हूँ:

select * from Books b inner join Author a on a.AuthorId = b.AuthorId 

डैप्पर आसानी से इस का समर्थन नहीं करता है, तो कोई विचार अन्य क्या विकल्प पर मेरे पास है?

+0

मैंने कॉलम के लिए उपनाम का उपयोग करके ऐसा किया है। आप उपनाम का उपयोग क्यों नहीं करना चाहेंगे? – LordHits

+0

@LordHits मैं इससे बचने की कोशिश कर रहा हूं क्योंकि मेरे पास बहुत सारे कॉलम हैं जो लौटाए गए हैं। मुझे एसक्यूएल में प्रत्येक को स्पष्ट रूप से टाइप करना नहीं होगा। साथ ही, मुझे विश्वास नहीं है कि यह तालिका में शामिल होने के साथ अपेक्षित काम करेगा –

उत्तर

15

डिज़ाइन द्वारा, डैपर में मैपिंग परत नहीं है। उस सड़क से एक कदम नीचे, और इससे पहले कि हम जानते हैं कि अचानक क्या हुआ है हम विन्यास फाइलों में डूब जाएंगे। तो: दो विकल्प:

  • एसक्यूएल
  • में एक अन्य नाम जोड़ें ताकि या तो (SQL) सी #

में एक परत जोड़ें:

select BookId as [Id], Name from Books 

या (सी #):

private int BookId { get { return Id; } set { Id = value; } } // just for dapper 
संबंधित मुद्दे