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; 
} 

Необъяснимо (для меня, по крайней мере), это приводит к Entity Framework, чтобы создать новую OrderStatus, а не просто установка существующего.

Однако, он хорошо работает, если я изменить мой контроллер, как это:

public ActionResult EditOrder(OrderViewModel viewModel) 
{ 
    var order = new EcommerceOrder(); 

    order.OrderStatus = viewModel.OrderStatus; 

    _orderService.UpdateOrder(order); 

    Return View(viewModel); 
} 

Любая идея, почему?

ответ

-1

Поскольку объект, который вы сохраняете, является новым, EF предполагает, что дочерние объекты также являются новыми.

Попробуйте положить:

_dbContext.Entry(order.orderStatus).State = EntityState.Modified; 

Перед тем как сохранить изменения требуют.

+0

Это не работает. Сущность, которую я пытаюсь сохранить, не нова. Я извлекаю Entity из контекста: var dbOrder = _dbContext.EcommerceOrders.Find (order.Id). – tocqueville