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