2009-02-25 14 views
10

मैं इस प्रश्न पर कई मृत सिरों के साथ आ रहा हूं। माना जाता है कि, .NET 3.5 SP1 में डब्ल्यूसीएफ अनुबंधों में एडीओ.NET इकाई फ्रेमवर्क इकाइयों के लिए समर्थन है। लेकिन जब मैं इस पर ठोस जानकारी की तलाश करता हूं तो मुझे बहुत सारे जवाब नहीं मिल रहे हैं। मुझे एक एमएसडीएन धागे पर यह एक स्निपेट मिला। क्या किसी को इसका कोई अनुभव है? [DataContract] के साथ क्या हुआ? क्या यह सब वहाँ है? इस पर इतनी छोटी सामग्री क्यों है?डब्लूसीएफ इकाई फ्रेमवर्क से अनुबंध?

यह माइक्रोसॉफ्ट में टिम मल्लालीयू का उत्तर है।

इकाई फ्रेमवर्क में उत्पन्न इकाई प्रकार डिफ़ॉल्ट डेटा अनुबंध से हैं। यदि मैं एंटीटी डिज़ाइनर में निम्न प्रकार का एक साधारण मॉडल बनाना चाहता हूं: कार्ट एंटीटी टाइप डिफ़ॉल्ट रूप से डेटा सदस्यों के रूप में एनोटेटेड सभी गुणों के साथ डेटाकंट्रैक्ट होता है। हम तो इस प्रकार एक WCF सेवा में इस का उपयोग कर सकते हैं:

[ServiceContract] 

public interface IService1 

{ 
    [OperationContract] 
    Cart[] AllCarts(); 
} 



public class Service1 : IService1 

{ 
    public Cart[] AllCarts() 

    { 
     using (MSPetShop4Entities context = new MSPetShop4Entities()) 

     { 
      var carts = from c in context.Carts select c; 
      return carts.ToArray(); 
     } 
    } 
} 

संस्थाओं DataContracts हैं के रूप में आप अब अपनी सेवाओं को रोल कर सकते हैं आप मनचाहे ढंग से और तार भर में इन भेजें।

उत्तर

1

आप आसानी से जा सकते हैं और ADO.NET Data Services का उपयोग कर सकते हैं।

+0

अंत में मैंने बिल्कुल ऐसा किया है। मुझे उम्मीद है कि यह लंबे समय तक गलती नहीं है। अब तक जो नकारात्मकता मैं देख रहा हूं वह यह है कि मैंने मॉडल पक्ष की बजाय क्लाइंट साइड पर एक रिपोजिटरी पैटर्न लागू करना समाप्त कर दिया है। मैं इसके बारे में खुश नहीं हूं और शायद बाद में इसे फिर से प्रतिक्रिया देना होगा। – Weej

+0

एडीओ.NET डेटा सेवाओं का खतरा यह है कि डीडीडी दृष्टिकोण का पालन करना मुश्किल हो सकता है। आपको ADO.NET डेटा सेवाओं के साथ ही व्यवहार करना चाहिए: डेटा सेवाएं। यदि आपको मॉडल सेवाओं के एक मजबूत सेट की आवश्यकता है, तो आपको इसे अलग से बनाना होगा। –

+0

एडीओ .NET डेटा सर्विसेज और ईएफसीएफ 4.1 के नवीनतम संस्करण के साथ भी यह अभी भी गंभीर रूप से सीमित है। उदाहरण के लिए, LINQ से एकत्रीकरण ऑपरेटरों में से कोई भी समर्थित नहीं है, जिसमें 'विशिष्ट() 'शामिल है। यदि आपको सीआरयूडी कार्यों से ज्यादा कुछ चाहिए तो आपको डेटा सेवाओं से दूर रहना चाहिए। – Yuck

6

मैं अनुशंसा करता हूं कि आप सीधे संस्थाएं वापस न करें। दुर्भाग्य से, माइक्रोसॉफ्ट ने इकाइयों के लिए डेटाकंट्रैक्ट के हिस्से के रूप में कार्यान्वयन-विशिष्ट डेटा शामिल करना चुना। यह अन्य प्लेटफ़ॉर्म के साथ इंटरऑपरेट नहीं करेगा, और यह ऐसी चीज है जो .NET संस्करणों के बीच भी इंटरऑपरेट करने में असफल हो सकती है।

इसके बजाय, मैं आपको डेटा ट्रांसफर ऑब्जेक्ट पैटर्न का पालन करने की सलाह देता हूं और केवल पीओसीओ कक्षाएं लौटाता हूं जो संस्थाओं में डेटा की प्रतियां हैं, बिना किसी व्यवहार के। आप टेबल का प्रतिनिधित्व करने के लिए ऐसी कक्षाओं की सूची लौट सकते हैं, आदि

+0

मैंने इसे माना है लेकिन दिमाग इस बात पर जोर देता है कि यह कितना काम कर सकता है। इसके चेहरे से, उपरोक्त सरल कोड चिंताओं को अलग करने के लिए प्रतीत नहीं होता है। अगर मैं ईएफ स्वीकार करने जा रहा हूं, तो क्या मैं एक पैन के लिए नहीं हूं, एक पौंड के लिए? दूसरे शब्दों में, मैं पहले ही पीओसीओ क्षेत्र से बाहर हूं। नहीं? – Weej

+0

ठीक है जॉन, क्षमा करें, मैंने आपकी बात याद की। आप कह रहे हैं कि लौटाई गई वस्तु में सरल डेटा के अलावा 'अन्य सामान' है। यह अच्छा नहीं है। क्या आपके पास कोई अच्छा तरीका है जिसके साथ आप डीटीओ अनुबंध बयान उत्पन्न करेंगे? – Weej

+0

मेरा हिस्सा एमएस को डब्ल्यूसीएफ का एक सबसेट प्रदान करना चाहता है जो कम अंतःक्रियाशील है, लेकिन अधिक डेटा एंटिटी, लिंक, इत्यादि अनुकूल है, लेकिन फिर भी ऐसा कुछ भी युग्मन जोड़ता है जो मुझे यकीन नहीं है कि यह एक अच्छा विचार है ... –

3

"इंटरफेस साझा करना और टाइप नहीं करना" सिद्धांत बताता है कि आपके पास तार के दोनों सिरों का मालिक नहीं है और/या आप एक सार्वजनिक चेहरा लिख ​​रहे हैं वेब सेवा। संदर्भ में डब्ल्यूसीएफ का उपयोग किया जा सकता है (और इसका उपयोग किया जाता है) जहां यह निश्चित रूप से मामले में है। कई एंटरप्राइज़ एन-स्तरीय आर्किटेक्चर में डब्ल्यूसीएफ-फ्रंटेड एप्लिकेशन स्तरीय है जो अन्य चीजों के बीच लोड-बैलेंसिंग की सुविधा प्रदान करता है। इन मामलों में यह साझा प्रकार के लिए पूरी तरह से मान्य है और, वास्तव में, वांछित है।

1

टिप्पणियों के जवाब में कुछ और अधिक विस्तार:

एफई द्वारा उत्पन्न वर्गों के साथ कई समस्याएं हैं। मैं अब SalesOrderHeader और SalesOrderDetail के साथ एक AdventureWorks उदाहरण पर देख रहा हूं। SalesOrderDetail इकाई में "SalesOrderHeader" और "SalesOrderHeaderReference" गुण दोनों हैं, दोनों को डेटामेम्बर के रूप में चिह्नित किया गया है। यह एक बग की तरह दिखता है, क्योंकि "SalesOrderHeader" संपत्ति को [XmlIgnore] और [SoapIgnore] भी चिह्नित किया जाता है।

इसके अलावा, इस बात पर विचार करें कि क्या आप पहले से ही मूल SalesRrderHeader पर लिंक को क्रमबद्ध करना चाहते हैं या नहीं। इसके अलावा, वास्तव में धारावाहिक क्या होना चाहिए? एसओएपी एक अंतःक्रियात्मक तरीके से संदर्भों का समर्थन नहीं करता है।

अंत में, इकाइयों के मूल वर्ग डेटा अनुबंध भी हैं। फिर भी उनके पास डेटा के साथ कुछ भी नहीं है, आप लौट रहे हैं - वे पूरी तरह कार्यान्वयन आर्टिफैक्ट हैं।

संक्षेप में, माइक्रोसॉफ्ट इस पर खराब हो गया। उन्होंने इसे नहीं सोचा था।

डीटीओ कक्षाएं उत्पन्न करने के तरीकों के बारे में, मैं कोडस्मिथ जैसे विभिन्न कोड जनरेशन टूल को देखने का सुझाव देता हूं। आप इसे स्वयं करने के लिए कोड लिख सकते हैं; मैंने अपनी पिछली स्थिति में ऐसा किया।डीटीओ उत्पन्न करने के बारे में अच्छी बात यह है कि आप डीटीओ से अनुवाद करने के तरीकों को भी उत्पन्न करते हैं।

ओवरहेड के रूप में, स्मृति में चारों ओर कुछ डेटा ले जाने का ओवरहेड नेटवर्क पर डेटा भेजने के लिए जितना समय लगेगा उससे तुलना में कुछ भी नहीं है!

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