1
我在我的控制器這樣做:抓取的實體,並把它當作參數傳遞給服務會導致導航屬性的問題
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);
}
任何想法,爲什麼?
這不起作用。我試圖保存的實體並不新鮮。我從上下文中獲取實體:var dbOrder = _dbContext.EcommerceOrders.Find(order.Id)。 – tocqueville