获取实体并将其作为参数传递给服务会导致导航属性出现问题
本文关键字:导航 属性 问题 服务 实体 参数传递 获取 | 更新日期: 2023-09-27 17:53:11
我在控制器中这样做:
public ActionResult EditOrder(OrderViewModel viewModel)
{
var order = _orderService.GetOrderById(viewModel.Id);
order.OrderStatus = viewModel.OrderStatus;
_orderService.UpdateOrder(order);
Return View(viewModel);
}
…UpdateOrder()是我的OrderService中的一个方法,它做以下事情:
public bool UpdateOrder(EcommerceOrder order)
{
var dbOrder = _dbContext.EcommerceOrders.Find(order.Id);
dbOrder.OrderStatus = _dbContext.EcommerceOrderStatuses.Find(order.OrderStatus.Id);
_dbContext.SaveChanges();
return true;
}
令人费解的是(至少对我来说),这会导致实体框架创建一个新的OrderStatus,而不是简单地设置现有的。
然而,如果我像这样改变我的控制器,它会很好地工作:
public ActionResult EditOrder(OrderViewModel viewModel)
{
var order = new EcommerceOrder();
order.OrderStatus = viewModel.OrderStatus;
_orderService.UpdateOrder(order);
Return View(viewModel);
}
知道为什么吗?
由于您保存的实体是新的,EF将假定子对象也是新的。
试着把:
_dbContext.Entry(order.orderStatus).State = EntityState.Modified;
在save changes call之前