मैं अपने प्रश्नोत्तरी प्रश्नों में संपत्ति मूल्य अनुवादों को शामिल करना चाहता हूं।NHibernate QueryOver में संपत्ति मूल्य रूपांतरण को कैसे शामिल करें। चयन सूची?
मुझे क्वेरी ऑब्जेक्ट पैटर्न के बाद क्वेरी लिखना पसंद है, सीधे एमवीसी व्यू मॉडल का उत्पादन। मेरे विचार मॉडल में, मैं उन संपत्ति प्रकारों का उपयोग करने की कोशिश करता हूं जो जितना संभव हो सके, रूपांतरण जटिलता को विचारों और नियंत्रकों से बाहर रखते हुए। इसका मतलब है कि कभी-कभी, मुझे एक प्रकार को दूसरे में परिवर्तित करने की आवश्यकता होगी, जैसे तारों में तिथियां।
कोई तर्क दे सकता है कि ऐसे रूपांतरण विचारों में किए जाने चाहिए लेकिन चूंकि मेरे अधिकांश दृश्य मॉडल सीधे JSON ऑब्जेक्ट्स में अनुवादित होते हैं, जिससे रूपांतरण अधिक बोझिल हो जाता है। जावास्क्रिप्ट में स्ट्रिंग रूपांतरण करने की तारीख सबसे अच्छी समस्या है और मेरा JSON कनवर्टर पर्याप्त लचीला नहीं है।
// Entity.
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public DateTimeOffset DateCreated { get; set; }
}
// View model.
public class CustomerViewModel
{
public string Name { get; set; }
public string DateCreated { get; set; } // Note the string type here.
}
// Query.
CustomerViewModel model = null;
List<CustomerViewModel> result = Session.QueryOver<Customer>()
.SelectList(list => list
.Select(n => n.Name).WithAlias(() => model.Name)
.Select(n => n.DateCreated).WithAlias(() => model.DateCreated))
.TransformUsing(Transformers.AliasToBean<CustomerViewModel>());
.Future<CustomerViewModel>()
.ToList();
क्वेरी कोड चल रहा है, निम्न अपवाद फेंक दिया जाता है:
यहाँ मैं क्या कर रहा हूं, इसका एक उदाहरण
Object of type 'System.DateTimeOffset' cannot be converted to type 'System.String'.
जाहिर है, इस निम्न पंक्ति की वजह से है:
.Select(n => n.DateCreated).WithAlias(() => model.DateCreated))
तो सवाल यह है: कैसे क्वेरी में रूपांतरण स्ट्रिंग करने की तारीख को शामिल करने के लिए?
मैं क्वेरी निष्पादित करने के बाद रूपांतरण निष्पादित नहीं करना चाहता क्योंकि मुझे उन्हें बदलने से पहले परिणामों को संग्रहीत करने के लिए अतिरिक्त इंटरमीडिएट क्लास की आवश्यकता होगी।
धन्यवाद। उपनाम के लिए, यह वास्तव में अनिवार्य है इसलिए मैंने इसे प्रश्न से हटा दिया। आपके पहले उदाहरण में स्ट्रिंग रूपांतरण वास्तव में स्ट्रिंग प्रारूप पर कोई नियंत्रण नहीं छोड़ता है, जबकि मुझे वास्तव में इसकी आवश्यकता होती है।मैं आपके दूसरे सुझाव की जांच करने जा रहा हूं, यह मेरी मदद कर सकता है हालांकि मैं अभी भी मॉडल मॉडल के बजाय क्वेरी ऑब्जेक्ट में रूपांतरण करना पसंद करता हूं। –
शुभकामनाएं, मैंने चीजों का एक गुच्छा करने की कोशिश की लेकिन यह सबसे अच्छा है जिसके साथ मैं आया हूं। अन्य संभावनाएं कस्टम ट्रांसफार्मर या ऑटोमैपर का उपयोग कर रही हैं। –
बहुत बदसूरत, लेकिन AFAIK अभी भी एकमात्र समाधान है जो काम करता है। अजीब बात यह है कि QueryOver को 'ToString()' के साथ बहुत परेशानी है, क्योंकि यह वास्तव में एक ही चीज़ पर अनुवाद करता है ... – Aaronaught