2009-04-20 10 views
5

जारी रखने की कोई आवश्यकता नहीं है मेरे पास एक कक्षा, ऑर्डर है, जिसे मैं एनएचबीर्नेट का उपयोग कर डेटाबेस में बना रहता हूं। वेब एप्लिकेशन में एक फ़ोल्डर फ्यूचर डाउन है जिसमें ऑब्जेक्ट से प्राप्त ऑब्जेक्ट होता है, हमारे उद्देश्यों के लिए, हम इसे कस्टमऑर्डर कह सकते हैं। मैं UI प्रयोजनों के लिए ऑर्डर ऑब्जेक्ट पर कुछ गुण रखने के लिए CustomOrder का उपयोग करता हूं। गुणों को वास्तव में डेटाबेस में सहेजना नहीं है।NHibernate विरासत कक्षा लेकिन

अज्ञात इकाई वर्ग: CustomOrder

जब मैं अपने सामान्य बचाने विधि सिर्फ एक आदेश वस्तु में, NHibernate शिकायत लेता है कि करने के लिए CustomOrder वर्ग गुजरती हैं।

मुझे डेटाबेस में कस्टम फ़ील्ड जारी रखने की आवश्यकता नहीं है, लेकिन मैं यह विरासत संरचना रखना चाहता हूं। क्या मैं गलत शब्दों में सोच रहा हूं या कुछ कर रहा हूं जो मुझे नहीं करना चाहिए?

सहेजें और कोड

public object Save(Order obj, object userID) { 
     Order o = (Order)obj; 
     ISession session = NHibernateHelper.GetCurrentSession(); 
     ITransaction tx = session.BeginTransaction(); 

     session.Save(o); 

विधि की पहली पंक्ति में मामले के बाद, नेट अभी भी CustomerOrder के रूप में यह पहचान करता है।

उत्तर

2
  1. आप .NET में किसी प्रकार का उदाहरण नहीं बदल सकते हैं। कोई कास्टिंग नहीं है या जो कुछ भी संभव बनाता है।
  2. डीबी से उदाहरण लोड करते समय, NHibernate आपके द्वारा संग्रहीत उसी प्रकार को बनाना चाहता है। यही कारण है कि यह कस्टमऑर्डर के लिए मैपिंग चाहता है।

आप इसे कभी भी कैसे कार्यान्वित करते हैं: आपको ऑर्डर का एक नया उदाहरण बनाना होगा।

// get the CustomOrder from somewhere 
CustomOrder customOrder; 
// create an instance of Order and store it. 
session.Save(customOrder.GetOrder()); 


class CustomOrder 
{ 

    // just one of many ways: a method on the CustomOrder to create 
    // instance of Order 
    public GetOrder() 
    { 
     return new Order() 
     { 
      property1 = this.property1, 
      property2 = this.property2, 
      property3 = this.property3 
     } 
    } 
} 

आप इसे स्वचालित रूप से करने के लिए प्रतिबिंब का उपयोग कर सकते हैं। या MemberwiseClone() पर एक नज़र डालें।

+0

+1 यह वही है जो मैं सुझाव देने जा रहा था (और इसे पूरा करने का एकमात्र तरीका)। –

0

यह थोड़ी देर हो गया है, लेकिन मेरा मानना ​​है कि आपको यह निर्दिष्ट करने में सक्षम होना चाहिए कि व्युत्पन्न कक्षा को हाइबरनेट मैपिंग फ़ाइल में बेस क्लास की ऑब्जेक्ट के रूप में जारी रखा जाना चाहिए।

+0

क्या उप-वर्ग के लिए भेदभाव प्रदान करने के लिए कोई कामकाज है? – Josh

संबंधित मुद्दे