2009-06-21 18 views
6

में संग्रहीत प्रक्रिया का उपयोग कैसे करें मेरे पास 3 टेबल हैं; मैं ADO.NET इकाई फ्रेमवर्क में संग्रहीत प्रक्रिया लिखता हूं।एडीओ.NET इकाई फ्रेमवर्क

ALTER PROCEDURE [dbo].[sp_GetDepartmanData] 
(@departman nvarchar(50)) 
BEGIN 
    SELECT 
    d.ID, d.Name as DepartmanName, 
    sb.Salary, sb.email, 
    sp.Name, sp.SurName, sp.Phone, sp.Married, sp.Address 
    FROM   
    Departman d 
    INNER JOIN StaffsBusiness sb ON d.ID = sb.StaffsPersonelDepartmanID 
    INNER JOIN StaffsPersonel sp ON sb.StaffsPersonelID = sp.ID 
    WHERE 
    d.Name = @departman 
END 

मैं एक संग्रहीत प्रक्रिया समारोह की जरूरत है मैं नीचे लिखें:

var staffPersonel = staffContext.GetPersonelInformationWithDepartmanID("Yazılım"); 

gvPersonel.DataSource = staffPersonel; 
gvPersonel.DataBind(); 

GetPersonelInformationWithDepartmanID समारोह मैं एसक्यूएल (ADO.NET इकाई की रूपरेखा में उपयोगकर्ता परिभाषित समारोह) 3 विकल्प देखते हैं (यह से लिखना मूर्खतापूर्ण है !!!) लेकिन मेरे पास 3 joininig तालिका है !!! अगर मैं 3 टेबल में शामिल हो तो मैं कैसे उपयोग कर सकता हूं?

उत्तर

6

ठीक है, तुम यहाँ कुछ ही कदम की जरूरत है:

  • (अपने इकाई की रूपरेखा मॉडल करने के लिए अपने संग्रहीत प्रक्रिया sp_GetDepartmanData जोड़ने एक अलग रूप में के रूप में - यह है दृढ़ता से की सिफारिश नहीं अपने संग्रहित प्रक्रियाओं sp_(something) कॉल करने के लिए - sp_ का उपयोग माइक्रोसॉफ्ट-केवल सिस्टम संग्रहीत प्रक्रियाओं के लिए आरक्षित है)
  • क्योंकि आपकी संग्रहीत प्रक्रिया डेटा के एक सेट को वापस कर रही है, आपको पहले इसके लिए एक वैचारिक इकाई बनाना होगा, इससे पहले कि आप ca n अपनी संग्रहीत प्रो का उपयोग करें; एंटिटी डिज़ाइनर में, एक नई इकाई बनाएं और इसे कुछ उपयोगी नाम दें जैसे DepartmentDataEntityType या कुछ; संग्रहित प्रक्रिया से वापस आने वाले सभी फ़ील्ड को उस इकाई प्रकार
  • पर जोड़ें, आप इकाई डेटा मॉडल में अपना फ़ंक्शन आयात बना सकते हैं - "model.store" अनुभाग में मॉडल ब्राउज़र पर जाएं, अपनी संग्रहीत प्रक्रिया पर जाएं , और "समारोह आयात बनाने"
  • पर राइट क्लिक करें अब आप एक नाम वस्तु संदर्भ में अपने समारोह देने के लिए और बताएं कि वह क्या देता कर सकते हैं - इस मामले में, (ऊपर से जैसे DepartmentDataEntityType) अपने नव निर्मित इकाई प्रकार लेने
  • आप कर चुके हैं!

    public global::System.Data.Objects.ObjectResult<DepartmentDataEntityType> GetPersonelInformationWithDepartmanID(global::System.String departmentName) 
    { 
        global::System.Data.Objects.ObjectParameter departmentNameParameter; 
    
        departmentNameParameter = new global::System.Data.Objects.ObjectParameter("departmentNameParameter", departmentName); 
    
        return base.ExecuteFunction<DepartmentDataEntityType>("sp_GetDepartmanData", departmentNameParameter); 
    } 
    

    यह समारोह अपने ऑब्जेक्ट संदर्भ पर अब अपने डेटाबेस से संग्रहीत प्रक्रिया के माध्यम से डेटा पुनः प्राप्त करने के लिए कॉल किया जा सकता है:

अब आप की तरह एक समारोह आयात कुछ होना चाहिए।

मार्क

संपादित करें:

यदि आपको मानचित्र त्रुटि प्राप्त होती है ("त्रुटि 3027: कोई मैपिंग के लिए EntitySet/AssociationSet निम्न निर्दिष्ट") ऐसा करने के बाद, यह है क्योंकि आप इकाई बनाई किसी भी चीज़ के लिए मैप नहीं किया गया है और केवल तब ही उपयोग किया जाता है जब फ़ंक्शन आयात इन इकाइयों के संग्रह को पॉप्युलेट करता है। आपको या तो इस इकाई को किसी डेटा स्टोर में मैप करने की ज़रूरत है या आपको इसे जटिल प्रकार में बदलने की जरूरत है।

जटिल प्रकार बनाने के लिए बस ईएफ डिजाइनर खोलें और खाली क्षेत्र पर राइट-क्लिक करें। जोड़ें> कॉम्प्लेक्स प्रकार पर जाएं। आपको मॉडल ब्राउज़र में एक नया जटिल प्रकार दिखाई देना चाहिए। राइट क्लिक करें और स्केलर गुण जोड़ें जैसे कि आपने अपनी इकाई में गुण कैसे जोड़े हैं। फिर अपनी इकाई को हटाएं और अपने जटिल प्रकार को इकाई के समान नाम दें।

तुम सब करने की :)

+0

हाय मार्क।। मैंने आपके निर्देशों का पालन करने का प्रयास किया, यहां .. और जब मैं एक पीओसीओ सेटअप करता हूं तो मैं इसे काम नहीं कर सकता। अगर मैं डिजाइनर को अपनी कक्षाएं बनाने की अनुमति देता हूं, तो यह काम करता है। क्या आप जानते हैं कि इसे पीओसीओ के साथ कैसे किया जाए? –

+0

@ शुद्ध। क्रोम: नहीं, क्षमा करें, मैंने वास्तव में ईएफ 4 पॉको के साथ कुछ भी नहीं किया है, इसलिए मैं वास्तव में नहीं कह सकता .... –

+0

यह काम करता है, लेकिन मुझे त्रुटि सूची में लगातार त्रुटि मिलती है ऐस "त्रुटि 3027: निम्न एंटीटीसेट/एसोसिएशनसेट के लिए निर्दिष्ट कोई मैपिंग नहीं है"। इस त्रुटि को हल करने के लिए मुझे क्या करने की ज़रूरत है? – Chev

1

आप इस "वैचारिक संस्था" कैसे बना सकता हूँ है कौन है? अगर मैं एक इकाई जो मैं करने के लिए मैप नहीं है निम्नलिखित त्रुटि मिलती है बनाने के लिए: "एंटिटी प्रकार 'foobar' डेटाबेस के लिए मैप नहीं है

+0

मुझे यह त्रुटि भी मिल रही है ... जो मैं कह सकता हूं कि यह 1.0 बग है कि वे मार्च में 4.0 तक आने तक ठीक करने का इरादा नहीं रखते हैं। https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=378518&wa=wsignin1.0 –

+0

बमर :(मैं वीएस -2010 का उपयोग कर रहा हूं और मुझे अभी भी यह समस्या है .. भले ही एमएस कनेक्ट कहता है बग 'तय' है। डब्ल्यूटीएफ :(qq :( –

संबंधित मुद्दे