我有一個非常簡單的服務器模型,其中包含具有子實體[Composition]列表的父實體。在我的客戶中,我有兩個功能。一個函數從父項中移除所有子實體,另一個函數移除所有子實體並編輯父實體的屬性。DomainContext在SubmitChanges完成後有時仍然HasChanges
當我簡單地刪除所有子實體和SubmitChanges()時,一切都很好。
當我刪除所有子實體和時,編輯父代和SubmitChanges(),當SubmitChanges()回調被觸發時,仍有未決更改(HasChanges == true)。
我使用的是Silverlight 4 RTM和RIA Services 1.0 RTM。
任何想法發生了什麼?
這裏是服務器實體:
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()方法之間的唯一區別是我編輯region.Name屬性的行。
您也可以下載,這在這裏再現樣本項目:http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip
哎什麼是他的解決方法答案中的「ctxt」?我可能正面臨同樣的問題。謝謝 – 2014-05-07 13:35:12