Domain Context Sometimes HasChanges Still After SubmitChanges Completed

I have a very simple server model that includes a parent object with a list of [Composition] child objects. My client I have 2 functions. One function removes all child entities from the parent, and the other removes everything, and also edits the property of the parent object.

When I just delete all child objects and SubmitChanges (), all is well.

When I delete all child entities and edit the parent and SubmitChanges (), still pending changes (HasChanges == true) when the SubmitChanges () callback fires.

I am using RTM RTM and RIA Services 1.0 RTM for Silverlight 4.

Any ideas on what's going on here?

Here are the server entities:

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; }
}

And here is the client code:

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() - , region.Name.

, : http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip

+5
1

Silverlight. -, RIA Service 1.0. Silverlight.

, , . , . , , . - AcceptChanges, . , , :

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

reset .

+4

All Articles