2010-05-24 32 views
5

मेरे पास एक बहुत ही सरल सर्वर मॉडल है जिसमें बाल संस्थाओं की एक [संरचना] सूची के साथ एक मूल इकाई शामिल है। मेरे ग्राहक में, मेरे पास 2 कार्य हैं। एक समारोह माता-पिता से सभी बाल संस्थाओं को हटा देता है और दूसरा सभी को हटा देता है और मूल इकाई पर एक संपत्ति भी संपादित करता है।डोमेनकॉन्टेक्स्ट कभी-कभी सबमिट चेंज के बाद हैस चेंज

जब मैं बस सभी बाल संस्थाओं और सबमिटChanges() को हटा देता हूं, तो सब कुछ ठीक है।

जब मैं सभी बच्चे इकाइयों को हटा देता हूं और अभिभावक और सबमिटChanges() संपादित करें, सबमिटबैंग() कॉलबैक निकाल दिए जाने पर अभी भी लंबित परिवर्तन (HasChanges == true) हैं।

मैं सिल्वरटाइट 4 आरटीएम और आरआईए सेवा 1.0 आरटीएम का उपयोग कर रहा हूं।

कोई विचार क्या हो रहा है?

public class RegionDto 
{ 
    public RegionDto() 
    { 
     Cities = new List<CityDto>(); 
    } 

    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    [Include] 
    [Composition] 
    [Association("RegionDto_CityDto", "Id", "RegionId")] 
    public List<CityDto> Cities { get; set; } 
} 

public class CityDto 
{ 
    [Key] 
    public int Id { get; set; } 

    public int RegionId { get; set; } 
    public string Name { get; set; } 
} 

और यहाँ ग्राहक कोड है::

public static class CState 
{ 
    private static RegionDomainContext _domainContext; 

    public static RegionDomainContext DomainContext 
    { 
     get 
     { 
      if (_domainContext == null) 
      { 
       _domainContext = new RegionDomainContext(); 
      } 
      return _domainContext; 
     } 
    } 

    public static void SaveChanges() 
    { 
     DomainContext.SubmitChanges(op => 
     { 
      if (DomainContext.HasChanges && !DomainContext.IsSubmitting) 
      { 
       var w = new ChildWindow(); 
       w.Content = "The DomainContext still has unsaved changes."; 
       w.Show(); 
      } 
     }, null); 
    } 
} 

public partial class MainPage : UserControl 
{ 
    private void ClearCitiesEditRegion(object sender, RoutedEventArgs e) 
    { 
     var region = (RegionDto)regionList.SelectedItem; 

     if (region != null) 
     { 
      region.Name += "*"; 
      while (region.Cities.Count > 0) 
      { 
       region.Cities.Remove(region.Cities.First()); 
      } 

      CState.SaveChanges(); 
     } 
    } 

    private void ClearCities(object sender, RoutedEventArgs e) 
    { 
     var region = (RegionDto)regionList.SelectedItem; 

     if (region != null) 
     { 
      while (region.Cities.Count > 0) 
      { 
       region.Cities.Remove(region.Cities.First()); 
      } 

      CState.SaveChanges(); 
     } 
    } 
} 

जब आप इस कोड को चलाने ChildWindow केवल जब तुम ClearCitiesEditRegion() विधि कहा जाता है दिखाया गया है

यहाँ सर्वर संस्थाएं हैं । इस और ClearCities() विधि के बीच एकमात्र अंतर वह रेखा है जहां मैं क्षेत्र संपादित करता हूं। नाम संपत्ति। http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip

उत्तर

4

मैं सिल्वरलाइट मंचों पर इस का उत्तर प्राप्त किया:

तुम भी एक नमूना परियोजना है कि यह यहाँ reproduces डाउनलोड कर सकते हैं। जाहिर है यह आरआईए सेवा 1.0 में एक बग है। निम्नलिखित Matthew's response on the Silverlight forums है।

हाँ, मैंने पुष्टि की है कि यह एक बग है। इसकी रिपोर्ट करने और रेपो प्रदान करने के लिए धन्यवाद। जैसा कि आपने पाया, बग केवल परिदृश्यों में रेपोरो करेगा जहां माता-पिता एक या अधिक बच्चों के अलावा संशोधित किए गए हैं। अगर सबमिट किया गया तो कामकाज स्पष्ट AcceptChanges करना है।

if (!submitOperation.HasError) 
    { 
     ((IChangeTracking)ctxt.EntityContainer).AcceptChanges(); 
    } 

यह सभी परिवर्तनों को स्वीकार सही ढंग से रीसेट परिवर्तन राज्य होगा: उदाहरण के लिए, यहाँ कोड आप एक प्रस्तुत कॉलबैक में लिखना चाहते हैं।

+0

हे आपके कामकाज के जवाब में "सीटीटीटी" क्या है? मुझे शायद एक ही मुद्दे का सामना करना पड़ रहा है। धन्यवाद –

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