2016-08-08 72 views
0

我有一個應用程序,它在UI中可以將DB中已經存在的類別添加到產品中,然後將其發回到後端。將脫附的對象附加到上下文中

但是,當我嘗試將其保存爲如下(嘗試1和2)時,它不會將附加類別保存到數據庫。

我錯過了什麼?

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

Save()方法有什麼作用? –

+0

它只是'db.SaveChanges();'與登錄和錯誤處理。 – Niklas

回答

1

訂單是你的問題。

首先,您將上下文中某些類別對象的條目設置爲修改(它應從數據庫中檢索具有相同ConcurrencyToken的對象並將狀態設置爲已修改),然後將當前對象附加到上下文(顯然處於不變狀態)。

這將覆蓋第一個調用,並且由於沒有修改或添加的條目將不會保留在數據庫中。

嘗試顛倒Attach()和State = Modified的順序。