Tôi đang sử dụng cơ sở dữ liệu Northwind làm ví dụ cho bài đăng này, nơi tôi đang gặp sự cố khi lưu các thực thể tách rời về cơ sở dữ liệu bằng khung thực thể.Entity Framework - Lưu thay đổi đối với các đối tượng liên quan ở trạng thái tách rời
Tôi có hai phương pháp sau đây để làm cho tôi các vùng lãnh thổ và các vùng:
static List<Region> GetRegions()
{
using (NorthwindEntities entities = new NorthwindEntities())
{
entities.Region.MergeOption = System.Data.Objects.MergeOption.NoTracking;
return entities.Region.ToList();
}
}
static List<Territories> GetTerritories()
{
using (NorthwindEntities entities = new NorthwindEntities())
{
entities.Territories.MergeOption = System.Data.Objects.MergeOption.NoTracking;
return entities.Territories.ToList();
}
}
Những phương pháp này đều làm việc tốt và làm cho tôi bộ sưu tập của các đối tượng tôi yêu cầu trong tình trạng tách ra.
Tôi cũng có một phương pháp tĩnh gọi SaveEntity, trong đó có cả một tổ chức cũ và các thực thể hiện ngồi biên tập, điều này được như sau:
static void SaveEntity(EntityObject oldEntity, EntityObject newEntity)
{
using (NorthwindEntities entities = new NorthwindEntities())
{
entities.Attach(oldEntity);
entities.ApplyPropertyChanges(newEntity.EntityKey.EntitySetName, newEntity);
entities.SaveChanges();
}
}
Phương pháp này một phần hoạt động, nơi các thay đổi đối với đối tượng được lưu xuống cơ sở dữ liệu, nhưng mọi thay đổi đối với mối quan hệ của các đối tượng liên quan đều không được lưu.
Tôi đã đoạn mã sau gọi các phương pháp trên là ví dụ của tôi:
List<Territories> territories = GetTerritories();
List<Region> regions = GetRegions();
Region region = regions.Where(n => n.RegionID == 2).FirstOrDefault();
Territories oldTerritory = territories.Where(n => n.TerritoryID == "01581").FirstOrDefault();
Territories newTerritory = ObjectCopier.Clone<Territories>(oldTerritory);
newTerritory.TerritoryDescription = "Hello World";
newTerritory.Region = region;
SaveEntity(oldTerritory, newTerritory);
Sự thay đổi để TerritoryDescription được lưu thành công, nhưng sự thay đổi đến khu vực không phải là, trong cơ sở dữ liệu nó vẫn như regionId = 1 thay vì RegionID = 2.
Có ai có thể cung cấp cho tôi một số thông tin chi tiết về lý do tại sao ApplyPropertyChanges không đẩy các thay đổi đối với các đối tượng liên quan không?
Ngoài ra, có ai biết cách tôi có thể khắc phục sự cố này không?