.NET

2010-04-05 6 views
6

के लिए एन-स्तरीय एप्लिकेशन में मजबूत टाइप किए गए डेटासेट का उपयोग करने के तरीके के बारे में प्रश्न मुझे Visual Studio द्वारा जेनरेट किए गए ADO.NET में मजबूत टाइप किए गए डेटा सेट पर कुछ विशेषज्ञ सलाह चाहिए। यहाँ विवरण हैं। पहले ही, आपका बहुत धन्यवाद।.NET

  • मैं एक एन स्तरीय आवेदन जहां प्रस्तुति परत सी #/विंडोज़ रूपों में है लिखना चाहते हैं, व्यापार परत एक वेब सेवा है और डेटा एक्सेस परत एसक्यूएल डाटाबेस है।

  • इसलिए, मैंने इसके लिए विजुअल स्टूडियो 2005 का उपयोग किया और समाधान में 3 परियोजनाएं बनाईं।

  • प्रोजेक्ट 1 डेटा एक्सेस लेयर है। इसमें मैंने एक मजबूत टाइप किए गए डेटा सेट और टेबल एडेप्टर बनाने के लिए विजुअल स्टूडियो डेटा सेट जेनरेटर का उपयोग किया है (टेस्ट करने के लिए मैंने इसे उत्तरविंड में ग्राहक तालिका पर बनाया है)। डेटा सेट को नॉर्थविंडडाटासेट कहा जाता है और अंदर की तालिका ग्राहकटेबल है।

  • प्रोजेक्ट 2 में वेब सेवा है जो केवल 1 विधि का खुलासा करती है जो GetCustomersDataSet है। यह डेटा सेट भरने और कॉलर पर वापस करने के लिए प्रोजेक्ट 1 लाइब्रेरी के टेबल एडेप्टर का उपयोग करता है। NorthWindDataSet और तालिका एडाप्टर का उपयोग करने में सक्षम होने के लिए, मैंने प्रोजेक्ट 1 का संदर्भ जोड़ा।

  • प्रोजेक्ट 3 एक जीत फ़ॉर्म ऐप है और यह संदर्भ के रूप में वेब सेवा का उपयोग करता है और डेटा सेट प्राप्त करने के लिए उस सेवा को कॉल करता है ।

पी एल में, इस आवेदन के निर्माण की प्रक्रिया में, मैं परियोजना 1 में और फ़ॉर्म की भार में ऊपर जेनरेट मैं वेब सेवा को कॉल और वेब सेवा से प्राप्त डेटासेट आवंटित डेटासेट के लिए एक संदर्भ जोड़ा इस डेटासेट में। लेकिन मैं त्रुटि मिलती है:

Cannot implicitly convert type 'PL.WebServiceLayerReference.NorthwindDataSet' to 'BL.NorthwindDataSet' e:\My Documents\Visual Studio 2008\Projects\DataSetWebServiceExample\PL\Form1.cs

दोनों डेटा सेट एक ही हैं, लेकिन क्योंकि मैं अलग-अलग स्थानों से संदर्भ कहा, मैं उपरोक्त त्रुटि मुझे लगता है कि हो रही है।

तो, मैंने जो किया वह प्रोजेक्ट 1 (जो डेटा सेट को परिभाषित करता है) के लिए प्रोजेक्ट 3 (यूआई) में एक संदर्भ जोड़ा गया और डेटासेट प्राप्त करने और सही प्रकार पर assing करने के लिए वेब सेवा का उपयोग किया, अब जब प्रोजेक्ट 3 (जिसमें वेब फॉर्म है) चलता है, मुझे नीचे रनटाइम अपवाद मिलता है।

System.InvalidOperationException: There is an error in XML document (1, 5058). ---> System.Xml.Schema.XmlSchemaException: Multiple definition of element ' http://tempuri.org/NorthwindDataSet.xsd:Customers ' causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence.

मुझे लगता है कि यह कुछ क्रॉस संदर्भ त्रुटियों के कारण हो सकता है।

मेरा प्रश्न है, दृश्य स्टूडियो जेनरेट डेटासेट्स का उपयोग इस तरह से करने का एक तरीका है कि मैं सभी परतों (पुन: उपयोग के लिए) में एक ही डेटासेट का उपयोग कर सकता हूं लेकिन तालिका एडाप्टर तर्क को डेटा एक्सेस लेयर में अलग कर सकता हूं ताकि सामने के अंत वेब सेवा द्वारा इस सब से सार है?

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

उत्तर

2

यदि मैं आप थे तो मैं डेटासेट से दूर रहूंगा। वे समस्या के लिए एक .NET 2.0 समाधान बहुत अधिक हैं, और वे एक बहुत अच्छा समाधान नहीं थे, या तो।

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

वेब सेवाओं पर स्थानांतरित होने पर इकाई फ्रेमवर्क में भी कम समस्याएं होती हैं। आपको अपने सभी नए वेब सेवा कार्यों के लिए डब्ल्यूसीएफ का उपयोग करना चाहिए (माइक्रोसॉफ्ट अब एएसएमएक्स वेब सेवाओं को "विरासत तकनीक" मानता है), लेकिन एएसएमएक्स वेब सेवाओं के साथ भी, ईएफ इकाइयां काफी साफ रूप से स्थानांतरित होंगी। .NET 3.5 में कुछ अपेक्षाकृत मामूली समस्याएं हैं, लेकिन उन्हें .NET 4.0 में संबोधित किया गया है।

0

मैं यहाँ जॉन का बैकअप लेने के हैं, हम एन-स्तरीय अनुप्रयोग में एफई v1.0 का उपयोग और निश्चित रूप से यह यह अलग ही समस्याएं है है, लेकिन आप नियमित रूप से वस्तुओं जो आप सेवा के माध्यम से धक्का कर सकते हैं। हालांकि मैं सलाह दूंगा (यदि आप ईएफ 1 नहीं ईएफ 4 के साथ जाते हैं जिसमें पीओसीओ के रूप में इसकी वस्तुओं को बेनकाब करने की क्षमता है) तो डीटीओ ऑब्जेक्ट्स की एक अलग परत रखने के लिए जो मुझे आपके डीएएल से डीओ ऑब्जेक्ट्स में मैप किया जाएगा, और सेवा के माध्यम से ट्रांसफर करने के लिए डीटीओ का उपयोग करेगा । इसके अलावा नेट रिया सेवाओं का उपयोग करें, वे वास्तव में शानदार हैं

@sb: DTO पर, EF, quick overlook of RIA services, DTO with datasets पर पुराने लेख पर, आप क्या करने की कोशिश कर रहे हैं।

+0

धन्यवाद। ऊपर वर्णित विषयों के बारे में मैं और कहां से जान सकता हूं? साथ ही, यह एक विरासत परियोजना है इसलिए मौजूदा कोड (बड़े कोड बेस) को नए प्रतिमान में स्थानांतरित करने के लिए पॉइंटर मदद कर सकता है लेकिन मेरे पास आगे बढ़ने पर बहुत लचीलापन नहीं हो सकता है ... –

+0

मैंने अपनी टिप्पणी के लिंक जोड़े – vittore

+0

आपके लिए धन्यवाद संकेत! –

0

My question is, is there a way to use the visual studio generated DataSets in such a way that I can use the same DataSet in all layers (for reuse) but separate the Table Adapter logic to the Data Access Layer so that the front end is abstracted from all this by the web service

आप एफई के लिए अपने अनुप्रयोग को फिर से लिखने या DTOs जोड़ने के लिए नहीं करना चाहते हैं, और आप जानते स्कीमा बराबर हैं, तो आप वेब सेवा के माध्यम से अपनी प्रस्तुति परत में डेटा सेट स्कीमा सेट कर सकते हैं।

Project3DataSet.ReadXmlSchema( 
    new StringReader(Project2WebService.GetCustomersDataSetSchema())); 

[WebMethod] 
public string GetCustomersDataSetSchema() 
{ 
    return new Project1DataSet().GetXmlSchema(); 
} 

आपका डेटा सेट स्कीमा ऑब्जेक्ट मॉडल के रूप में कार्य करता है। सुंदर नहीं है लेकिन नौकरी करना चाहिए।

इसी के साथ

कहा जा रहा है, अगर यह एक नई परियोजना है, मैं अन्य उत्तर से सहमत - डेटा सेट करने से बचें।

+0

धन्यवाद। यह निश्चित रूप से मेरी मदद करेगा क्योंकि यह एक विरासत कोड आधार है जिसे मैं ईएफ में स्थानांतरित करने में सक्षम नहीं हो सकता। पहले से मौजूद एक बहुत सी कोड मौजूद है। फिर से धन्यवाद। –

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