我使用定义模式粘合剂绑定顺序/OrderItem在我的行动。这种模式粘合剂使用ServiceLocator.电流。GetInstance();在ICart又取决于IOrderRepository(不确定如果此事项)下。

现在,一切正常,当我创造的第一阶的项目。当我建立的第二个。然后我试图显示的顺序,现在包含了两个项目。这是使用

  public ActionResult Show(Order order) {}

在那里了是受我的自粘合剂。我跟踪其BindModel和看,呼叫后到

  order = cart.GetOrder(id);

为了项目确定的--即我添加以监视窗口,视性质、产品和他们所确定。

然而,当控制流动来显示(顺序)的作法,顺序的第一项无效的产品--它们进行访问的结果在下面的错误(着名的一个):

它能够.LazyInitializationException:初始化[的订单。核心。OrderItem#5440c233-fb7e-4dc9-8aec-9c8c0115808b]-没懒洋洋地进行初始化收集的作用:订单。核心。OrderItem.产品,没有届会或届会闭

我现在可以看到这个窗口观看在查看订单。项目[0].产品。

奇怪的是,第二阶项仍然是确定!因此,如果这样下去

  • HTTP请求...我的模式粘合剂获得了使用orderRepository.获得(id)-会是确定两个以项目。
  • 视它的魔力
  • 动作的方法展示(顺序) <-这里的会议秩序。项目[0].产品的丢失,同时为项目[1]不是

如果我加入另一个项目的顺序,然后在演出(),只有项目[2].产品是正确的,这两个项目[0]和项目[1]产品坏(不会议)。

什么在这里?

我使用锋利的建筑和每届会议的请求。我实际上证实,EndRequest不是所谓的之间的模型得到它的粘合剂以及显示()收到的错误之一。

更新:一些代码(重要)

public class Cart : ICart
{
      public Cart(IOrderRepository orderRepository, ICurrentUser currentUser, IUserSessionStorage storage) {}
      public Order GetOrder(Guid id)
      {
         return orderRepository.Get(id);
      }
}

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
  var cart = ServiceLocator.Current.GetInstance<ICart>();
  //Guid guidId = new Guid(id_value_from_context);
  var order = cart.GetOrder(guidId); // here order is OK completely
  return order;
}

OrderRepository是S#arp架构库,并使用WebSessionStorage类,其中只有关闭届会议在EndRequest处理程序。正如我所说,我已经验证了这不是得到所谓的之间的顺序是确定和秩序是没有的。

更新:我不知道,如果这可能是因为额外的手册交易周围orderRepository.保存(顺序)。将调查的明天,但是发现了类似的东西在这里,在如此。

更新:此外,这种情况发生后才这样的:

cart.Save(item);
return RedirectToAction<OrdersController>(c => c.Show(item.Order));

当我然后去的地址栏和新闻"进入"重新载入页面,它工作正常。所以这是一个时间问题。

有什么有趣,有没有这样的错误,如果我这样做:

return RedirectToAction("Show", "Orders", new { order = item.Order });

所以它的东西与MvcContrib试图处理了在TempData,我想说...

我发现我有这个控制器:

   [PassParametersDuringRedirect]
   public class OrdersController

并认为我的订单参数来自TempData而不是ModelBinder...虽然模型的粘合剂有没有火,也是。但是,当我移的属性,问题并没有消失。所以它的东西与RedirectToController<>从MvcContrib但我不知道为什么发生这种情况。

有帮助吗?

解决方案 2

哦,我的上帝,我已经把[PassParametersDuringRedirect]在我BaseController.我真的做到了,在时间时,我尝试用MvcContrib,只是忘了。和它回来咬我这么坏,我已经失去了几个小时试图解决这个问题。

因此,问题是我是愚蠢的,而且学到的教训,这是一个永远不应该做到全系统属性行为,因为这不是好于全球变量在意识的副作用。

其他提示

它能够.LazyInitializationException:初始化[的订单。核心。OrderItem#5440c233-fb7e-4dc9-8aec-9c8c0115808b]-没懒洋洋地进行初始化收集的作用:订单。核心。OrderItem.产品,没有届会或届会闭

意味着你会被关闭之前,你要求的产品。你确定这没有什么闭上你的话?也许你可以发布一些代码?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top