将脱离的对象附加到上下文

时间:2016-08-08 22:01:19

标签: c# entity-framework

我有一个应用程序,在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; }

}

1 个答案:

答案 0 :(得分:1)

订单是你的问题。

首先,在上下文中将某个类别对象的条目设置为Modified(应该从数据库中检索具有相同ConcurrencyTokens的对象并将状态设置为modified), 然后将当前对象附加到上下文(显然处于Unchanged状态)。

这将覆盖第一个调用,并且由于没有修改或添加任何条目,因此不会在数据库中保留。

尝试颠倒Attach()和State = Modified。

的顺序