Nachverfolgen von änderungen in Entity Framework 4.0 verwenden von POCO Dynamische Proxies über mehrere Daten-Kontexte

Ich begann messing mit EF 4.0, weil ich neugierig bin, POCO Möglichkeiten... ich wollte zu simulieren getrennt web-Umgebung, und Sie schrieb den folgenden code, um dies zu simulieren:

  1. Speichern Sie eine test-Objekt in der Datenbank.
  2. Abrufen des test-Objekt
  3. Entsorgen Sie die DataContext-im Zusammenhang mit der test-Objekt habe ich verwendet um es zu empfangen
  4. Update der test-Objekt
  5. Erstellen Sie eine neue Daten-Rahmen und speichern Sie die änderungen auf dem test-Objekt, das automatisch verfolgt, innerhalb der DynamicProxy erzeugt, die gegen meine POCO-Objekt.

Das problem ist, dass wenn ich Anrufe dataContext.SaveChanges in der Test-Methode vor, die updates werden nicht angewendet. Der testStore Entität zeigt den status "Geändert", wenn ich überprüfen Sie Ihre EntityStateTracker, aber es wird nicht mehr geändert, wenn ich es in der neuen dataContext-Geschäfte-Eigenschaft. Ich hätte gedacht, dass der Aufruf der Attach-Methode auf die neuen dataContext würde auch das Objekt "Modified" - Zustand über, aber das scheint nicht der Fall sein. Gibt es etwas, was ich bin fehlt? Ich bin auf jeden Fall arbeiten mit self-tracking-POCOs mit DynamicProxies.

private static void SaveTestStore(string storeName = "TestStore")
{
  using (var context = new DataContext())
  {
    Store newStore = context.Stores.CreateObject();
    newStore.Name = storeName;
    context.Stores.AddObject(newStore);
    context.SaveChanges();
  }
}

private static Store GetStore(string storeName = "TestStore")
{
  using (var context = new DataContext())
  {
    return (from store in context.Stores
            where store.Name == storeName
            select store).SingleOrDefault();
  }
}

[Test]
public void Test_Store_Update_Using_Different_DataContext()
{
  SaveTestStore();
  Store testStore = GetStore();
  testStore.Name = "Updated";      

  using (var dataContext = new DataContext())
  {
    dataContext.Stores.Attach(testStore);
    dataContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);        
  }

  Store updatedStore = GetStore("Updated");
  Assert.IsNotNull(updatedStore);
}
  • Hey Rob... Haben Sie gesehen, die zweite Antwort auf Ihre Frage? Habe nicht gehört, von Ihnen seit dann.. ich Frage mich, was du darüber denkst =/
InformationsquelleAutor Rob Packwood | 2010-04-15
Schreibe einen Kommentar