पृष्ठभूमि के साथ एचक्यूएल के लिए एनएचबीर्नेट फ्लेंट (क्वेरीओवर) प्रतिस्थापन FluentNHibernate का उपयोग करके, आखिरी देव बिल्ड एनएचबीर्नेट 3.0 के साथ काम कर रहा है।सहसंबंधित सबक्वायरी
यहाँ WorkIncident के लिए प्रकार घोषणाओं है:
// Enumeration used in class below.
public enum TicketStatus
{
Open = 1,
Closed = 10,
Hold = 20
}
// Ticket class.
public class WorkIncident
{
public virtual int EntryId { get; set; }
public virtual int TicketNumber { get; set; }
public virtual string ModifierNtId { get; set; }
public virtual DateTime ModifiedDate { get; set; }
public virtual TicketStatus Status { get; set; }
public virtual int Version { get; set; }
public virtual string Title { get; set; }
public virtual string Details { get; set; }
}
// FluentNHibernate mapping
public class WorkIncidentMap : ClassMap<WorkIncident>
{
public WorkIncidentMap()
{
Table("incident_details");
Id(wi => wi.EntryId, "wiid");
Map(wi => wi.TicketNumber, "workitem_number");
Map(wi => wi.Title, "workitem_title");
Map(wi => wi.Details, "workitem_comment");
Map(wi => wi.ModifiedDate, "workitem_modified_on");
Map(wi => wi.ModifierNtId, "modified_by_worker_nt_id");
Map(wi => wi.Status, "workitem_status_lookup_id").CustomType<EnumType<Status>>();
Map(wi => wi.Version, "workitem_version");
}
}
मानचित्रण ठीक काम करता है, और मैं कोई समस्या नहीं के साथ निम्नलिखित की तरह प्रश्नों कर सकते हैं:
session.QueryOver<AltirisIncident>()
.Where(ai => ai.ModifierNtId == worker.Name.Replace("\\", @"\"))
.AndRestrictionOn(ai => ai.ModifiedDate)
.IsBetween(DateTime.Today)
.And(DateTime.Today.AddDays(1))
.List<WorkIncident>();
यह मैं काम के सभी देता है वस्तुओं (मूल रूप से डेस्क परेशानी टिकटों की सहायता) वर्तमान तारीख पर एक विशिष्ट उपयोगकर्ता द्वारा छुआ।
from WorkIncident as t1
where t1.ModifierNtId = :ntid
and t1.ModifiedDate between :startdate and :enddate
and t1.Status = :status
and (t1.Version = 1
or t1.TicketNumber in (
select t2.TicketNumber
from WorkIncident as t2
where t2.Status != t1.Status
and t2.TicketNumber = t1.TicketNumber
and t2.Version = t1.Version - 1))
इस क्वेरी मुझे सब काम आइटम है कि एक बंद स्थिति में एक कार्यकर्ता द्वारा रखा गया था की सूची देता है:
हालांकि, मैं मुसीबत एक धाराप्रवाह घोषणा में निम्नलिखित HQL का अनुवाद होने की है। डेटाबेस में टिकटों को संग्रहीत करने के तरीके को देखते हुए (प्रत्येक टिकट में एकाधिक रिकॉर्ड होते हैं (प्रत्येक अपडेट के लिए एक) और पर्यवेक्षक अक्सर एक कर्मचारी को बंद करने के बाद टिकट में नोट्स जोड़ते हैं, ऐसी स्थितियों की ओर जाता है जहां मैं केवल देख नहीं सकता एक बंद की स्थिति के साथ पिछले संस्करण संख्या मज़बूती से मुझे बताने की जो एक टिकट बंद कर दिया।
किसी भी मदद की बहुत सराहना की जाएगी, जैसा कि मैंने जितना संभव हो उतना HQL और जादू तार से दूर जाने की पसंद करेंगे।