J'ai un modèle de serveur très simple qui inclut une entité parente avec une liste [Entité] d'entités enfants. Dans mon client, j'ai 2 fonctions. Une fonction supprime toutes les entités enfant du parent et l'autre supprime tout et édite également une propriété sur l'entité parent.DomainContext parfois encore HasChanges après l'exécution de SubmitChanges
Lorsque je supprime simplement toutes les entités enfant et SubmitChanges(), tout va bien.
Lorsque je supprime toutes les entités enfants et modifier le parent et SubmitChanges(), il reste des modifications en attente (HasChanges == true) lorsque le rappel SubmitChanges() est déclenché. J'utilise Silverlight 4 RTM et RIA Services 1.0 RTM.
Des idées ce qui se passe ici?
Voici les entités du serveur:
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; }
}
Et voici le code client:
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();
}
}
}
Lorsque vous exécutez ce code, la ChildWindow n'apparaît que lorsque vous la méthode ClearCitiesEditRegion() est appelée . La seule différence entre ceci et la méthode ClearCities() est la ligne où je édite la propriété region.Name.
Vous pouvez également télécharger un exemple de projet qui reproduit ce ici: http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip
hey ce qui est "ctxt" dans sa solution de contournement? Je suis probablement confronté au même problème. Merci –