我正在使用Northwind數據庫作爲此文章的示例,其中存在使用實體框架將分離實體保存回數據庫的問題。實體框架 - 保存對分離狀態的相關對象的更改
我有以下兩種方法來讓我的領土和地區:
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();
}
}
這些方法都工作得不錯,讓我得到我需要的分離狀態對象的集合。
我也有一個名爲SaveEntity靜態方法,這需要在這兩個老實體和當前editted實體,這是如下:
static void SaveEntity(EntityObject oldEntity, EntityObject newEntity)
{
using (NorthwindEntities entities = new NorthwindEntities())
{
entities.Attach(oldEntity);
entities.ApplyPropertyChanges(newEntity.EntityKey.EntitySetName, newEntity);
entities.SaveChanges();
}
}
這種方法部分作品,其中更改對象被保存直到數據庫,但不保存對相關對象關係的任何更改。
我有以下代碼調用上面的方法爲我的例子:
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);
到TerritoryDescription的變化是成功保存,但改變區域不,在數據庫中它仍然是RegionID = 1而不是RegionID = 2。
任何人都可以提供一些見解,爲什麼ApplyPropertyChanges不傳播相關對象的更改?
另外,有誰知道我如何解決這個問題?