2009-04-29 19 views
10

मैं एक n स्तरीय समाधान जहां मैं एक WCF सेवा से संबंधित डेटा पुन: प्राप्त कर रहा हूँ बनाया है, एक Windows Forms अनुप्रयोग के भीतर इसे अद्यतन करने, और फिर WCF के माध्यम से अद्यतन डेटा लौटने डेटाबेस के लिए कायम किए जाने की । आवेदन, डब्ल्यूसीएफ सेवा और डेटाबेस सभी अलग-अलग मशीनों पर हैं।इकाई की रूपरेखा, WCF और अपडेट

डेटा पुनः प्राप्त किया जा रहा एक वस्तु और बच्चे वस्तुओं के होते हैं ...

public Product Select(string catalogueNumber) { 

    return (from p in this.ProductEntities.Products.Include(@"Tracks") 
      where p.vcCatalogueNumber == catalogueNumber 
      select p).FirstOrDefault() ?? new Product(); 
} 

अद्यतन क्लाइंट अनुप्रयोग, साथ ही मौजूदा सामग्री को अद्यतन करने के रूप में, यह भी अतिरिक्त "ट्रैक" वस्तुओं सम्मिलित कर सकते हैं द्वारा लागू किया जा रहा।

मैं क्लाइंट अनुप्रयोग से वापस उत्पाद वस्तु प्राप्त करते हैं, मैं अद्यतन के सभी सही ढंग से देख सकते हैं, लेकिन आदेश में परिवर्तन सही ढंग से मैं कुछ हुप्स के माध्यम से कूद करने के लिए है के सभी को बचाने के लिए ...

public void Save(Product product) { 

    Product original = this.Select(product.vcCatalogueNumber); 
    if (original.EntityKey != null) { 

     this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product); 

     // There must be a better way to sort out the child objects... 
     foreach (Track track in product.Tracks.ToList()) { 

      if (track.EntityKey == null) { 
       original.Tracks.Add(track); 
      } 
      else { 
       this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track); 
      } 

     } 

    } 
    else { 

     this.ProductEntities.AddToProducts(product); 

    } 

    this.ProductEntities.SaveChanges(); 

} 

निश्चित रूप से, ऐसा करने का एक आसान तरीका होना चाहिए?

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

उत्तर

3

मैं अपने विशेष परिदृश्य के लिए एक पहले से तैयार उत्तर नहीं है - लेकिन सिर्फ एक सवाल: क्या आप ADO.NET डेटा सेवाएँ (f.k.a. "Astoria") की जाँच की है?

वे एंटीटी फ्रेमवर्क, डब्ल्यूसीएफ के रीस्टफुल इंटरफ़ेस के शीर्ष पर बनाए गए हैं, और वे क्लाइंट-साइड अनुभव प्रदान करते हैं, साथ ही वे केवल पूछताछ के लिए एक सभ्य कहानी नहीं रखते हैं, बल्कि डेटाबेस में रिकॉर्ड डालने के लिए भी एक सभ्य कहानी प्रतीत करते हैं।

क्या यह एक विकल्प हो सकता है?

उन्हें David Hayden's blog पर, MSDN पर बाहर की जाँच करें, Channel9 पर, या MIX08 and MIX 09

मार्क

+0

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

+0

मुझे अंततः इस पर देखने के लिए मिल गया है (मुख्य रूप से क्योंकि मैंने सिल्वरलाइट के साथ खेलना शुरू किया) और वास्तव में, मुझे लगता है कि यह वह जवाब है जिसे मैं ढूंढ रहा था। –

0

इकाई की रूपरेखा v1.0 की सीमाओं में से एक संस्थाओं अपडेट किया जा रहा है। दुर्भाग्यवश मुझे लगता है कि संस्करण 2 आने तक आप भाग्य से बाहर हैं।

3

पर उत्कृष्ट सत्र से कुछ देखने के आप शायद डैनी सीमन्स 'EntityBag नमूना पर एक नज़र रखना चाहिए।

यह मुद्दों के इन प्रकार के आसान बनाने के लिए बनाया गया है: http://code.msdn.microsoft.com/entitybag/

के रूप में Catz कहते हैं चीजों .NET 4.0 में एक बहुत आसान हो जाएगा।

उन चीजों में से एक जो हम मदद करने के लिए योजना बना रहे हैं, वह आपके लिए एक टी 4 टेम्पलेट तैयार कर रहा है जो आपके लिए कक्षाएं उत्पन्न करता है जो स्वयं ट्रैकिंग करने में सक्षम हैं, और कुछ अतिरिक्त सतह इन स्वयं-ट्रैकिंग इकाइयों के लिए आसान बनाने के लिए जब वे सर्वर स्तर पर वापस आते हैं तो संदर्भ में चेंज() लागू करें।

आशा इस

चीयर्स एलेक्स (माइक्रोसॉफ्ट पर इकाई की रूपरेखा टीम पर प्रधानमंत्री) में मदद करता है।

+0

हाँ और आपको उस लड़के को बताने के लिए +2 वोट मिले जो मैंने अभी कहा था! :) – mhenrixon

+0

मैंने ईमानदारी से एंटीटीबैग की कोशिश की है और पाया है कि यह वही नहीं करेगा जो मैं चाहता था। Google के नतीजे बताते हैं कि एंटीटीबैग ईएफ/आरटीएम के साथ काम नहीं करता है, लेकिन यह संभव है कि मैं इसे गलत कर रहा हूं - किसी भी तरह से, मुझे अपने मूल ऑब्जेक्ट को अपडेट करने का प्रयास करते समय बहुत सारे अपवाद प्राप्त हुए, जब इसमें अद्यतन और जोड़ भी शामिल थे बाल वस्तु संग्रह। वैसे भी धन्यवाद! –

1

मुझे लगता है कि इस सूत्र का पालन चुप है, इसलिए मैं अपने आप को एक छोटे से अद्यतन करने की अनुमति ...

वीवी! ई -4 में स्वयं-ट्रैकिंग इकाइयां आ गई हैं!

इस की जाँच करें:

http://blogs.msdn.com/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx
इकाई की रूपरेखा टीम द्वारा स्वयं ट्रैकिंग कार्यप्रणाली का स्पष्टीकरण।

http://aleembawany.com/2009/05/17/new-features-in-entity-framework-40-v2/
एफई में नई सुविधाओं का anouncement 4.

http://msdn.microsoft.com/en-us/magazine/ee321569.aspx
कट संस्थाओं के लिए कई एन टीयर पैटर्न की तुलना।

आनंद लें!

1

इकाई फ़्रेमरोक 4 में आप एक अलग इकाई को अद्यतन करने के लिए "ApplyCurrentValues" विधि का उपयोग कर सकते हैं।

अपने परिदृश्य में कुछ इस तरह होगा:

this.ProductEntities.Product.ApplyCurrentValues(product); 
foreach (Track track in product.Tracks.ToList()) { 
if (track.EntityKey != null) 
{ 
//Update Entity 
    this.ProductEntities.Track.ApplyCurrentValues(track); 
} 
else 
{ 
    //New Entity 
    this.ProductEntities.Track.Attach(track); 
} 

}

मुझे आशा है कि यह उपयोगी होगा

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

  • कोई संबंधित समस्या नहीं^_^