Tôi có một mô hình máy chủ rất đơn giản bao gồm một thực thể cha với một danh sách [Thành phần] của các thực thể con. Trong khách hàng của tôi, tôi có 2 chức năng. Một hàm loại bỏ tất cả các thực thể con từ cha và người kia loại bỏ tất cả và cũng chỉnh sửa thuộc tính trên thực thể cha.DomainContext đôi khi vẫn HasChanges sau khi SubmitChanges hoàn thành
Khi tôi chỉ xóa tất cả các thực thể con và SubmitChanges(), tất cả đều tốt.
Khi tôi xóa tất cả các thực thể con và chỉnh sửa phụ huynh và SubmitChanges(), vẫn còn các thay đổi đang chờ xử lý (HasChanges == true) khi cuộc gọi lại SubmitChanges() được kích hoạt.
Tôi đang sử dụng Silverlight 4 RTM và RIA Services 1.0 RTM.
Bất kỳ ý tưởng gì đang diễn ra ở đây?
Dưới đây là các đối tượng máy chủ:
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; }
}
Và đây là mã khách hàng:
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();
}
}
}
Khi bạn chạy mã này ChildWindow chỉ hiển thị khi bạn ClearCitiesEditRegion() phương pháp được gọi là . Sự khác biệt duy nhất giữa phương thức này và phương thức ClearCities() là dòng mà tôi chỉnh sửa thuộc tính region.Name.
Bạn cũng có thể tải về một dự án mẫu mà tái tạo này ở đây: http://dl.dropbox.com/u/2393192/RIA_Services_Problem.zip
hey "ctxt" trong câu trả lời giải pháp của anh ấy là gì? Tôi có lẽ đang phải đối mặt với cùng một vấn đề. Cảm ơn –