DomainContext иногда все еще HasChanges после SubmitChanges завершается

У меня есть очень простая модель сервера, которая включает родительский объект с [Состав] список дочерних объектов. В моем клиенте у меня есть 2 функции. Одна функция удаляет все дочерние объекты из родителя, и другой удаляет все и также редактирует свойство на родительском объекте.

Когда я просто удаляю все дочерние объекты и SubmitChanges (), все хорошо.

Когда я удаляю все дочерние объекты и редактирую родителя и SubmitChanges (), там все еще ожидают изменения (HasChanges == верный), когда SubmitChanges () обратный вызов запущен.

Я использую Silveright 4 RTM and RIA Services 1.0 RTM.

Какие-либо идеи, что продолжается здесь?

Вот объекты сервера:

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

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

    public string Name { get; set; }

    [Include]
    [Composition]
    [Association("RegionDto_CityDto", "Id", "RegionId")]
    public List 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 () метод является строкой, где я редактирую регион. Свойство Name.

Можно также загрузить демонстрационный проект, который воспроизводит это здесь: http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip

5
задан Gone Coding 12 November 2010 в 11:54
поделиться

1 ответ

Я получил ответ на это на форумах Silverlight. Видимо это ошибка в RIA Service 1.0. Ниже приводится ответ Мэтью на форумах Silverlight .

Да, я подтвердил, что это ошибка. Спасибо, что сообщили об этом и предоставили репро. Как вы обнаружили, ошибка буду воспроизводить только композицию сценарии, в которых родитель был изменен в дополнение к одному или нескольким дети.Обходной путь - выполнить явный AcceptChanges, если отправка Был успешен. Например, вот код, который вы бы написали в отправке callback:

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

Это примет все изменения и сбросит изменить состояние правильно.

4
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: