मेरे पास एनएचबीरनेट लिंक क्वेरी है जो काम नहीं कर रही है कि मैं कैसे उम्मीद करूंगा।एनएचबेर्नेट एक बुरे जुड़ने के साथ एसक्यूएल का उत्पादन कर रहा है
समस्या जहां खंड में बाईं बाएं तालिका से एक निरर्थक int कॉलम का उपयोग करने से आती है। यह एक आंतरिक शामिल होने की तरह कार्य करने के लिए शामिल हो रहा है।
var list = this.WorkflowDiaryManager.WorkflowActionRepository.All
.Fetch(x => x.CaseView)
.Fetch(x => x.WorkflowActionType)
.ThenFetchMany(x => x.WorkflowActionPriorityList)
.Where(x => x.AssignedUser.Id == userId || x.CaseView.MooseUserId == userId)
एसक्यूएल इस द्वारा उत्पादित की तरह दिखता है (के बाद से शामिल होने के - आप सभी चयन को देखने के लिए की जरूरत नहीं है)
from Kctc.WorkflowAction workflowac0_
left outer join Kctc.WorkflowCaseView workflowca1_ on workflowac0_.CaseId=workflowca1_.CaseId
left outer join Kctc.WorkflowActionType workflowac2_ on workflowac0_.WorkflowActionTypeId=workflowac2_.WorkflowActionTypeId
left outer join Kctc.WorkflowActionPriority workflowac3_ on workflowac2_.WorkflowActionTypeId=workflowac3_.WorkflowActionTypeId
,Kctc.WorkflowCaseView workflowca4_
where workflowac0_.CaseId=workflowca4_.CaseId
and ([email protected] or workflowca4_.[MooseUserId][email protected]);
@p0 = 1087 [Type: Int32 (0)],
@p1 = 1087 [Type: Int32 (0)]
तो बात यह है कि समस्या का कारण है की लाइन 5 ऊपर स्निपेट। जैसा कि आप देख सकते हैं, NHBernate मेरे वर्कफ़्लो कैस व्यू व्यू पर 'पुराने स्कूल' में शामिल होने का प्रयास कर रहा है। इससे प्रश्न अन्यथा वैध क्रियाओं को बाहर करने का कारण बनता है जिनके पास वर्कफ़्लोएक्शन तालिका में केसआईडी नहीं है।
क्या कोई यह समझा सकता है कि NHBernate इस SQL को क्यों लिख रहा है, और मैं बेहतर क्वेरी बनाने के लिए इसे कैसे प्रोत्साहित कर सकता हूं?
धन्यवाद!
WorkflowCaseViewMap
Table("Kctc.WorkflowCaseView");
Id(x => x.Id).Column("CaseId");
Map(x => x.MooseUserId).Nullable();
से
Table("Kctc.WorkflowAction");
Id(x => x.Id).GeneratedBy.Identity().Column("WorkflowActionId");
References(x => x.WorkflowActionType).Column("WorkflowActionTypeId").Unique();
References(x => x.CompletedBy).Column("CompletedBy");
References(x => x.CaseView).Column("CaseId").Not.Update().Unique();
References(x => x.AssignedUser).Column("AssignedUser");
महत्वपूर्ण बिट्स WorkflowActionMap से महत्वपूर्ण बिट्स इस को देखते हुए, मुझे आश्चर्य है कि अगर मैं एक HasMany वापस अन्य रास्ते पर जा रहा है चाहिए ...
संपादित करें।
त्वरित उत्तर के लिए धन्यवाद। मैंने आपके सुझाव की कोशिश की है (और मैं खुद ही एक ही चीज़ के साथ आया था, बस इसका उपयोग कर रहा था! = नल) और इससे मदद नहीं मिली। –
@ मार्कविचर्स: यदि आप उस हिस्से को 'कहां' खंड से पूरी तरह से हटा देते हैं तो क्या होता है? 'वर्कफ़्लो कैसएक्शन' और 'वर्कफ़्लो कैस व्यू' के बीच आपका मानचित्रण कैसा है? –
अगर मैं "|| x.CaseView.MooseUserId == userId" को हटा देता हूं, जहां से यह खंड के बिना कार्रवाई को वापस लाता है और तीन बाएं बाहरी जुड़ता है, जैसा कि मैं उम्मीद करता हूं। –