2016-08-08 13 views
0

Ich habe eine Anwendung, die in der Benutzeroberfläche Kategorien, die bereits in der DB vorhanden sind, zu einem Produkt hinzufügen und dann zurück an das Back-End senden kann.Anfügen eines gelöschten Objekts an Kontext

Aber wenn ich versuche, es wie folgt zu speichern (Versuche 1 und 2), speichert es nicht die angefügten Kategorien in der Datenbank.

Was fehlt mir?

public bool SaveProduct(Product product) 
{ 
    //Try 1 
    foreach(var item in product.Categories) { 
      db.Entry(item).State = item.Id == 0 ? 
       EntityState.Added : 
       EntityState.Modified; 
     } 
    //Try 2 
    foreach(Category category in product.Categories) { 
     db.Entry(category).State = EntityState.Modified; 
     db.Category.Attach(category); 
    } 
    return Save(); 
} 

public class Product 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public List<Category> Categories { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

} 
+0

Was macht die 'Save()' Methode? –

+0

Es ist nur 'db.SaveChanges();' mit Loggin und Fehlerbehandlung. – Niklas

Antwort

1

Die Reihenfolge ist Ihr Problem.

Zuerst setzen Sie den Eintrag eines Kategorieobjekts in Ihrem Kontext auf Modifiziert (das das Objekt mit demselben ConcurrencyTokens aus der Datenbank abrufen und den Status auf Modifizieren setzen soll), , und hängt dann Ihr aktuelles Objekt an den Kontext an (offensichtlich in unverändertem Zustand).

Dies überschreibt den ersten Aufruf und wird, da keine Einträge geändert oder hinzugefügt werden, nicht in der Datenbank beibehalten.

Versuchen Sie, die Reihenfolge von Attach() und State = Modified umzukehren.

Verwandte Themen