我有一个应用程序,在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 :(得分:1)
订单是你的问题。
首先,在上下文中将某个类别对象的条目设置为Modified(应该从数据库中检索具有相同ConcurrencyTokens的对象并将状态设置为modified), 然后将当前对象附加到上下文(显然处于Unchanged状态)。
这将覆盖第一个调用,并且由于没有修改或添加任何条目,因此不会在数据库中保留。
尝试颠倒Attach()和State = Modified。
的顺序