Я использую базу данных Northwind в качестве примера для этого сообщения, когда у меня возникает проблема сохранения отдельных элементов обратно в базу данных с использованием структуры сущности.Entity Framework - сохранение изменений связанных объектов в отдельном состоянии
У меня есть следующие два способа получить мне территории и регионы:
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 не пропагандирует изменения связанных объектов?
Кроме того, знает ли кто-нибудь, как я могу обойти эту проблему?