मेरा वर्तमान प्रोजेक्ट NHibernate 3.0b1 और NHibernate.Linq.Query<T>()
API का उपयोग कर रहा है। मैं LINQ में बहुत स्पष्ट हूं, लेकिन मुझे एचक्यूएल या आईसीआरटीरिया एपीआई के साथ बिल्कुल कोई अनुभव नहीं है। मेरे प्रश्नों में से एक IQueryable API द्वारा समर्थित नहीं है, इसलिए मुझे लगता है कि मुझे पिछले एपीआई में से किसी एक का उपयोग करने की आवश्यकता है - लेकिन मुझे नहीं पता कि कहां से शुरू करना है।एनएचबीर्नेट आईसीआरटीरिया एपीआई का उपयोग करके मैं इस LINQ क्वेरी को कैसे व्यक्त करूं?
मैं ICriteria के लिए एक अच्छा "शुरू हो रही है" गाइड के लिए वेब की खोज करने की कोशिश की है, लेकिन केवल उदाहरण मैंने पाया या तो अभी तक बहुत साधारण यहाँ या अभी तक बहुत उन्नत मुझे समझने के लिए लागू करने के लिए कर रहे हैं। अगर किसी के साथ पास करने के लिए कुछ अच्छी शिक्षा सामग्री है, तो इसकी सराहना की जाएगी।
किसी भी मामले में, ऑब्जेक्ट मॉडल मैं इस तरह दिखता है के खिलाफ की क्वेरी कर रहा हूँ (बहुत सरल बनाया, गैर प्रासंगिक गुण छोड़े गए):
class Ticket {
IEnumerable<TicketAction> Actions { get; set; }
}
abstract class TicketAction {
Person TakenBy { get; set; }
DateTime Timestamp { get; set; }
}
class CreateAction : TicketAction {}
class Person {
string Name { get; set; }
}
एक Ticket
अपने इतिहास का वर्णन TicketAction
का संग्रह है। TicketAction
उपप्रकारों में CreateAction
, ReassignAction
, CloseAction
आदि शामिल हैं। सभी टिकटों में CreateAction
बनाया गया है जब इस संग्रह में जोड़ा गया था।
यह LINQ क्वेरी किसी दिए गए नाम से किसी के द्वारा बनाए गए टिकटों की खोज कर रही है।
var createdByName = "john".ToUpper();
var tickets = _session.Query<Ticket>()
.Where(t => t.Actions
.OfType<CreateAction>()
.Any(a => a.TakenBy.Name.ToUpper().Contains(createdByName));
OfType<T>()
विधि एक NotSupportedException
फेंक दिया करने के लिए कारण बनता है। क्या मैं इसके बजाय आईसीआरटीरिया का उपयोग कर ऐसा कर सकता हूं?
मैं नहीं बल्कि एक करने के लिए एक बैक-संदर्भ जोड़ने के लिए नहीं चाहते हैं 'टिकट' की 'टिकट 'अगर मैं इसकी मदद कर सकता हूं क्योंकि इससे अन्य समस्याएं शुरू होंगी, लेकिन टिप के लिए धन्यवाद। :) –
इस तरह की स्थितियों को संभालने का दूसरा तरीका वास्तव में एक स्ट्रिंग बिल्डर में एचक्यूएल बनाना था। हमने लिंक को निबर्ननेट अभिव्यक्तियों का उपयोग करने का प्रयास किया, लेकिन जब संग्रह ऑब्जेक्ट पक्ष पर होता है तो वे भी संग्रह का समर्थन नहीं करते हैं। दुर्भाग्य से, "युक्त" विधि लिंक से nHibernate में अनुवाद नहीं करती है। – Josh
मैं आपके सुझाव के साथ गया (टिकट पर टिकट के लिए संदर्भ जोड़ना), लेकिन मैं एक त्रुटि के साथ समाप्त होता हूं: "NHibernate.QueryException: संपत्ति को हल नहीं कर सका: TakenBy।का नाम: CreateAction " –