小编Mic*_*mig的帖子

在修改现有子实体框架的同时添加新的子对象

我看一下类似问题的一些答案,但它们似乎并不适合我的.

我正在尝试合并来自实体框架的模式:DbContext(第90页),它似乎不起作用.我正在使用的代码如下:

[HttpPost]
public ActionResult Edit(Order order)
{
     if (ModelState.IsValid)
     {
         db.Orders.Add(order);
         db.Entry(order).State = EntityState.Modified;

         foreach (var orderDetail in order.OrderDetails)
         {
              if (orderDetail.OrderId == 0)
              {
                  db.Entry(orderDetail).State = EntityState.Added;
              }
              else
              {
                  db.Entry(orderDetail).State = EntityState.Modified;
              }
              // The example order that I'm updating has two child entities
              // so this orderId will be for the third, added one.
              int addedOrderDetailId = order.OrderDetails[2].OrderId;
          }
          db.SaveChanges();
          return RedirectToAction("Index");
     }

     ViewBag.CustomerId = new SelectList(db.Customers, "CustomerId", "CompanyName", order.CustomerId);

     return View(order);

}
Run Code Online (Sandbox Code Playgroud)

我一直在运行一个示例,其中Order对象有两个现有的OrderDetail对象,我正在尝试添加第三个.我包含了addedOrderDetailId变量,因此我可以将它添加到'Watch'并查看它何时更改

我发现正在发生的是添加的OrderDetail对象的OrderId(当输入foreach循环时为0)正由实体框架更新到Order对象的OrderId.这发生在第一次迭代到foreach循环之后(当第一个子实体的状态更改为修改时.这意味着所有三个子节点都被标记为已修改.这导致SaveChanges()尝试更新条目进入不存在的数据库.

如果有其他人遇到过这个问题,那么我会很乐意为你解决这个问题.我还必须处理被删除的现有子对象,但我还没有解决这个问题,所以如果有人知道这种模式,那也值得赞赏. …

asp.net-mvc entity-framework disconnected

5
推荐指数
1
解决办法
2568
查看次数