2010-07-14 20 views
5

NHibernate के साथ मैं अब, मेरे डोमेन वस्तुओं पर विदेशी कुंजी का खुलासा तो उत्पाद अब एक संपत्ति है:ASP.NET MVC NHibernate मॉडल बाइंडिंग

public int CategoryId {get;set;} 

लेकिन इसके बजाय है:

public Category Category {get;set;} 

Unforunately यह एएसपी.नेट एमवीसी में स्वचालित मॉडल बाध्यकारी के साथ इतना अच्छा काम नहीं करता है - अगर मैं सीधे अपने डोमेन ऑब्जेक्ट पर एक फॉर्म संग्रह को बांधना चाहता हूं।

उदाहरण के लिए, मेरे पास मेरे दृश्य में केवल श्रेणी आईडी मानों की एक चयन सूची नहीं हो सकती है, मेरे नियंत्रक कार्रवाई में एक उत्पाद ऑब्जेक्ट स्वीकार करें, और उम्मीद है कि एमवीसी इसे एक श्रेणी वस्तु में परिवर्तित कर देगा।

मेरे समाधान अब तक दृश्य मॉडल विदेशी कुंजी मान के लिए गुण है बनाने के लिए किया गया है - हालांकि, यह सामान्य रूप से एक निष्पक्ष मेरी नियंत्रक में कोड और अतिरिक्त मानचित्रण तर्क में दोहराव की बिट की ओर जाता है।

क्या कोई बेहतर तरीका है?

उत्तर

7

विशेष रूप से आपके विचारों के लिए तैयार किए गए पेरेड-डाउन व्यू मॉडल का उपयोग करना अनुशंसित दृष्टिकोण है; आप AutoMapper का उपयोग करके आवश्यक मानचित्रण संचालन को सरल बना सकते हैं।

+1

मुझे पता है कि यह अनुशंसित दृष्टिकोण है लेकिन कभी-कभी यह आवश्यक नहीं है। मेरे पास तीन गुणों के साथ एक साधारण डोमेन ऑब्जेक्ट है - बस इतना आसान काम करने के लिए बहुत कुछ अतिरिक्त काम लगता है। –

+1

@ बेन - प्रसिद्ध अंतिम शब्द .. गंभीरता से हालांकि, ऑटोमैपर यह मामूली बनाता है, एक बार जब आप अपने डोमेन मॉडल और अपने दृश्य मॉडल के बीच किसी प्रकार का डिस्कनेक्ट करना शुरू कर देते हैं तो आप इस मार्ग पर जाने के लिए स्वयं को धन्यवाद देंगे ... – DanP

+0

और मेरे पास है कुछ त्वरित और गंदे चाहते हैं :) - ऑटोमैपर सर्वश्रेष्ठ शर्त लग रहा है और सुझाए गए कुछ अन्य समाधानों के आधार पर, विशिष्ट दृश्य मॉडल सरल वस्तुओं पर भी सबसे साफ दृष्टिकोण प्रतीत होता है। –

4

साथ ही, याद रखें कि निबर्ननेट का उपयोग करते समय, आप प्रॉक्सी ऑब्जेक्ट्स से निपट रहे हैं और मॉडल बाध्यकारी, वेब सेवाओं या रिमोट कॉल्स जैसे एप्लिकेशन सीमाओं में उन्हें क्रमबद्ध और क्रमबद्ध करना सर्वोत्तम नहीं है।

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

+0

सहमत; हम वास्तव में dtos की 2 परतें हैं; एक सेवा परत द्वारा लौटाया गया और एक विशेष रूप से विचारों के लिए उपयोग किया जाता है। सेवा परत वाले लोग सुनिश्चित करते हैं कि सेवा सीमा पार करने से पहले आवश्यक डेटा पूरी तरह से हाइड्रेटेड हो। – DanP