2011-10-31 15 views
5

मेरा परिदृश्य मैं विजुअल स्टूडियो 2010 का उपयोग एंटिटी फ्रेमवर्क 4.1 के साथ कर रहा हूं मेरे पास कई तालिकाओं और कई संग्रहीत प्रक्रियाओं के साथ विरासत डेटाबेस है। मैं एक ASP.NET सी # MVC 3मैपिंग इकाई ढांचे में संग्रहीत प्रक्रियाओं का चयन करें

का उपयोग कर रहा 'डेटाबेस पहले' डिजाइन को अपनाया है ADO.NET DbContext का उपयोग कर तो मैं सभी मॉडल और संगठनों और नेविगेशन गुण अच्छी तरह से की स्थापना के साथ एक edmx है कार्यक्रम लिख रहा हूँ। मैं प्रासंगिक मॉडलों को प्रक्रियाओं को सम्मिलित, अद्यतन, हटा सकता हूं। मैंने अन्य संग्रहीत प्रक्रियाओं को आयात करने के लिए 'फंक्शन आयात' का उपयोग किया है। हालांकि, मुझे क्रियाओं का चयन करने के लिए मेरी चयन प्रक्रियाओं को मैप करने का कोई तरीका नहीं मिल रहा है (आईडी द्वारा चुनें, चयन सूची, फ़िल्टर द्वारा चयन करें आदि)।

ईएफ आलसी लोडिंग का उपयोग करने लगता है, इसलिए मैं क्या करना चाहता हूं जब कोई ऑब्जेक्ट अपने बच्चे की वस्तुओं को लाता है तो यह पहले से लिखित संग्रहित प्रक्रियाओं का उपयोग करता है। (चुनिंदा प्रक्रियाओं दूसरों के बीच, एक 'isDeleted' ध्वज को ध्यान में रखना, और 'द्वारा आदेश' खंड का उपयोग करें)

मैं इस लेख से देख http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx LINQ एसक्यूएल के लिए खींचें और एस.पी. की बूंद, की अनुमति देता है कि जो लगता है, अधिक या कम, बिल्कुल मैं क्या चाहता हूँ।

मैं DefiningQuery शब्द भी भर चुका हूं। http://msdn.microsoft.com/en-us/library/cc982038.aspx क्या यह मैं चाहता हूं? मुझे नोट पसंद नहीं है 'परिभाषित प्रश्नों सहित स्टोरेज मॉडल में किए गए कोई भी बदलाव, जब आप अपडेट मॉडल विज़ार्ड चलाते हैं तो ओवरराइट किया जाएगा।'

संक्षेप में, मैं क्या करना चाहता हूं जब कोई ऑब्जेक्ट अपने बच्चे की वस्तुओं को प्राप्त करता है तो यह मेरी संग्रहीत प्रक्रियाओं का उपयोग करता है।

क्या मैं इकाई फ्रेमवर्क का उपयोग करके अपना लक्ष्य प्राप्त कर सकता हूं? क्या मुझे कुछ स्पष्ट याद आया है?

या मैं तो उदाहरण के लिए, मेरे उत्पन्न पता मॉडल इस संपत्ति है, वास्तव में चालाक हो सकता है और डाटाबेस इकाई टी -4 टेम्पलेट को संशोधित करने, प्रयास करना चाहिए:

public virtual ICollection<AddressLine> AddressLines { 
    get{ 
     DBWrapper _db = new DBWrapper(); 
     return _db.GetAddressLines(AddressID); 
    } 
    set{}; 
} 

जहां GetAddressLines एक फ़ंक्शन को कॉल कस्टम समारोह है आयात और निरंतर रूपांतरण करता है।

उत्तर

6

यह संभव नहीं है। आप अपनी संग्रहीत प्रक्रियाओं को फ़ंक्शन आयात के रूप में आयात कर सकते हैं और उन्हें मैन्युअल रूप से निष्पादित कर सकते हैं लेकिन आप कस्टम संग्रहित प्रक्रियाओं के साथ ईएफ द्वारा उत्पन्न प्रश्नों को प्रतिस्थापित नहीं कर सकते हैं।

+0

धन्यवाद: जूली Lerman का लेख देखें। यह पुष्टि करता है कि मुझे क्या संदेह था – Webbie4

2

सिवाय इसके कि आप कर सकते हैं।

अपनी सबसे बुनियादी चयन संग्रहीत प्रक्रिया (यानी, जो "मेरे * से चुनें * का सबसे नज़दीकी" है, और अपने डेटाबेस में एक दृश्य को परिभाषित करने के लिए इसका उपयोग करें। इकाई ढांचे के बजाय "myview" का उपयोग करें Msgstr "इस दृश्य-आधारित इकाई के लिए संग्रहीत प्रो को अपने सम्मिलित करें, अद्यतन करें और हटाएं जैसा कि आपने मूल रूप से अपनी तालिका के लिए किया था।

अंत में, अपने अधिक चुनिंदा चयनों के लिए फ़ंक्शन आयात का उपयोग करें, और उन्हें अपनी इकाई के संग्रह को वापस करने के लिए परिभाषित करें इसलिए यदि आपके पास एक व्यक्ति इकाई की तरह कुछ था, और आपके पास FetchPersonByAge (int) जैसे कुछ संग्रहीत प्रोसेस था, तो आपकी इकाई "GetByAge (int)" जैसी कुछ स्थिर विधि के साथ समाप्त हो जाएगी। फिर आप इसे कॉल कर सकते हैं इस तरह कोड: var people33 = व्यक्ति।getByAge (33);

मैंने यह किया है, और यह काफी अच्छा काम करता है, जिससे मुझे विरासत डेटाबेस के डिजाइनरों का सम्मान करने की इजाजत मिलती है कि सभी डेटाबेस एक्सेस उनकी संग्रहित प्रोसेस के माध्यम से हो, और कोई भी उपयोगकर्ता कोड सीधे टेबल तक पहुंच न सके।

http://msdn.microsoft.com/en-us/data/gg699321.aspx

डेव

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