代码之家  ›  专栏  ›  技术社区  ›  Dave Thieben

城堡单轨硬绑尝试绑到不存在的排

  •  0
  • Dave Thieben  · 技术社区  · 14 年前

    我有一个购物车应用程序在单轨上运行,使用castle activerecord/nhibernate,并且有一个购物车表和一个购物车项目表,它们映射到实体。

    这是一个场景:用户将东西添加到购物车中,比如说5个项目,然后查看购物车。购物车显示所有5项。用户复制选项卡/窗口,并获取同一购物车的另一个选项卡(称为选项卡B)。用户从购物车中删除了一个项目,因此现在选项卡B中有4个项目,但在原始选项卡A中仍然有5个项目。用户返回到选项卡A,更新购物车中的内容并单击提交更改的“更新”按钮。我的单轨操作尝试使用视图中的数据对购物车项目执行ardatabind,其中包括所有5个项目。当它到达用户从选项卡B中删除的项目时,它会为该项目抛出“不存在具有给定标识符的行”。

    我不知道是否有一种方法可以让它不绑定该行、返回空值、返回新实例等?在ardatabind属性上有一个autoloadBehavior参数,但它似乎只影响子实体的加载,而不影响根实体。不管我选择哪个选项,我都会在控件进入操作方法之前得到异常(AutoloadBehavior.Never除外,但这并不能真正帮助我)。

    相反,我有调用request.obtainParamsNode()的代码来提取表单节点并手动将其解析为对象,并忽略不再存在的节点。有更好的方法吗?

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mauricio Scheffer    14 年前

    继承 ARDataBinder 重写 FindByPrimaryKey(Type targetType, object id) :

    protected override object FindByPrimaryKey(Type targetType, object id) {
      return FindByPrimaryKey(targetType, id, false);
    }
    

    这里的钥匙是 参数,使其返回空值而不是引发。

    然后继承 ARDataBindAttribute ,重写createBinder()方法,并使其返回新的活页夹,而不是默认的ardatabinder。

    然后应用自定义绑定器属性而不是ardatabindAttribute。

    推荐文章