2016-08-08 51 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的顺序。