मैं इस तरह एक वर्ग कुछ मिल गया है:nHibernate
public class Account
{
public virtual int Id { get; private set; }
public virtual string Username { get; set; }
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual string Password { get; private set; }
public void SetPassword(string password){ ... }
public bool CheckPassword(string password) { ... }
}
मैं इसे इस तरह से सेट कर लिए जाने के बाद से मैं नहीं है कभी Password
संपत्ति कोड में सीधे उपयोग करना चाहते हैं Account
प्रकार का उपयोग करता है। खाता नक्शा इस तरह दिखता है:
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
Id(x => x.Id);
Map(x => x.Username);
Map(x => x.Password);
}
}
जब मैं वास्तव में NHibernate के साथ इस का उपयोग मैं एक InvalidProxyTypeException
NHibernate.InvalidProxyTypeException: The following types may not be used as proxies:
Fringine.Users.Account: method SetPassword should be virtual
Fringine.Users.Account: method CheckPassword should be virtual
मैं समझता हूँ कि NHibernate और आलसी लोड हो रहा है समर्थन करने के लिए एक प्रॉक्सी वर्ग बनाने के लिए कोशिश कर रहा है कि मिल मैं या तो अपवाद को हल करने के लिए मानचित्र में वर्चुअल को Not.LazyLoad() जोड़ने के तरीकों को चिह्नित कर सकता हूं। लेकिन - मैं उनमें से किसी एक को नहीं करना चाहता हूं। मैं आलसी लोडिंग का समर्थन करना चाहता हूं लेकिन मुझे नहीं लगता कि उन तरीकों को वर्चुअल होने की आवश्यकता क्यों है।
क्या NHibernate (या आंतरिक रूप से कैसल आंतरिक रूप से) निर्धारित करने के लिए विधि का उपयोग करता है कि कौन से फ़ील्ड का उपयोग किया जाता है और उन गुणों के लिए आलसी लोडिंग को अनुकूलित किया जाता है? यदि नहीं, तो विधि के संदर्भ में विधि को आभासी होने की आवश्यकता क्यों है और जब वे विधि द्वारा संदर्भित होते हैं तो वे आलसी लोड हो जाएंगे।
क्या वर्चुअल आवश्यकता से कुछ विधियों को बाहर करने का कोई तरीका है?
पर यकीन नहीं है कि अगर मैं उन तरीकों से किसी फ़ील्ड तक पहुंचता हूं तो मुझे यकीन नहीं है। जब फ़ील्ड को इसकी प्रॉक्सी प्रॉपर्टी के माध्यम से एक्सेस किया जाता है तो यह इंस्टेंस प्रारंभ करेगा। केवल वही गुण/विधियां जिन्हें वास्तव में वर्चुअलाइज्ड करने की आवश्यकता होती है वे वास्तव में तालिका में कॉलम का प्रतिनिधित्व करते हैं। –
@ पॉल: नहीं, आप गलत समझते हैं। आप * अपने तरीकों से फ़ील्ड * सीधे * एक्सेस कर सकते हैं। इसमें कुछ भी गलत नहीं है, आपको इस मामले में आलसी लोडिंग के बारे में चिंता करने की आवश्यकता नहीं है। आपकी इकाइयों में कोड * पूरी तरह से प्रारंभिक इकाई के भीतर हमेशा * निष्पादित होता है। यह एनएच को अधिक पारदर्शी बनाता है। उदाहरण के लिए यह वास्तव में दुर्लभ है कि उदाहरण के राज्य पर निर्भर नहीं है, इसलिए ऑप्टिमाइज़ करने के लिए बहुत सीमित स्थान है। –
आह, मैंने गलत समझा। क्षेत्र की पहुंच की सुरक्षा करना समझ में आता है। –