Używam bazy danych Northwind jako przykładu dla tego wpisu, w którym mam problem z zapisaniem odłączonych jednostek z powrotem do bazy danych przy użyciu struktury encji.Struktura obiektu - zapisywanie zmian w obiektach pokrewnych w stanie wolnostojącym
Mam następujące dwa sposoby, żeby mnie terytoria i regiony:
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();
}
}
tych metod zarówno drobne prace i dostać mi kolekcję obiektów wymagam w jednorodzinnym państwa.
Mam też metodę statyczną o nazwie SaveEntity, który odbywa się zarówno starej jednostki i aktualnie editted podmiotu, to w następujący sposób:
static void SaveEntity(EntityObject oldEntity, EntityObject newEntity)
{
using (NorthwindEntities entities = new NorthwindEntities())
{
entities.Attach(oldEntity);
entities.ApplyPropertyChanges(newEntity.EntityKey.EntitySetName, newEntity);
entities.SaveChanges();
}
}
Metoda ta częściowo działa, gdzie są zapisane zmiany przedmiotu do bazy danych, ale wszelkie zmiany relacji powiązanych obiektów nie są zapisywane.
Mam następujący kod wywołujący powyższe metody jak moim przykładzie:
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);
Zmiana do TerritoryDescription się pomyślnie, ale zmiana na region nie jest w bazie danych nadal pozostaje regionId = 1 zamiast RegionID = 2.
Czy ktoś może mi dać wgląd w to, dlaczego ApplyPropertyChanges nie propaguje zmian w powiązanych obiektach?
Czy ktoś wie, jak rozwiązać ten problem?