3

asp.net mvc 3 に小さなプロジェクトがあり、RavenDB を使用してデータを保存しています。しかし、エンティティを更新しようとすると、「 ID 'orders/257 ' に別のオブジェクトを関連付けようとしました」というエラーが表示されます。エンティティを管理するためのサービス クラスがあります。

Orderというエンティティを更新するメソッドです。明確にするために、残りのメソッドは省略しました

  public ErrorState UpdateOrder(Order order)
    {
        try
        {
            documentSession.Store(order);
            documentSession.SaveChanges();
            return new ErrorState { Success = true };

        }
        catch (Exception ex)
        {
            return new ErrorState { Success = false, ExceptionMessage = ex.Message };

        }
    }

これは OrderRepository の残りの部分です

  private readonly IDocumentSession documentSession;

public OrderRepository(IDocumentSession _documentSession)
{
    documentSession = _documentSession;
}

ErrorState クラスは、アプリの管理エラー用で、bool の成功と例外の文字列メッセージが含まれています。

これは私の編集アクションです。

 public ActionResult Edit(int id)
        {
            Order order = orderRepository.ObtainOrder(id);
            if (order == null)
            {
                TempData["message"] = string.Format("Order no: {0} not found", id);
                return RedirectToAction("Index");
            }
            return View(order);

        }



        [HttpPost]
        public ActionResult Edit(Order order)
        {
            if(!ModelState.IsValid)
                return View();

            errorState = orderRepository.UpdateOrder(order);
            if (errorState.Success)
            {
                TempData["message"] = string.Format("Order no: {0} has been changed", order.Id);
                return RedirectToAction("Index");
            }
            else
            {
                TempData["Message"] = string.Format("Error on update order no: {0} MSG: {1}", order.Id,errorState.ExceptionMessage);
                return RedirectToAction("Index");
            }


        }

これはコントローラーの残りの部分です。わかりやすくするために、残りのアクションは省略しました。

private readonly IOrderRepository orderRepository;
private ErrorState errorState;

public HomeController(IOrderRepository _orderRepository,IDocumentSession _documentSession)
{
    orderRepository = _orderRepository;

} 
4

1 に答える 1

1

その ID を持つ注文のインスタンスが既にあります。セッションの有効期間を確認してください。複数のリクエストで同じセッションが存在する可能性はありますか?

于 2012-11-06T18:59:10.070 に答える