Pregunta

Tengo una aplicación que se ejecuta en carrito de la compra y el uso de monorraíl Castillo ActiveRecord / NHibernate, y no hay una mesa y una mesa ShoppingCart ShoppingCartItems, que se asignan a las entidades.

Este es el escenario: un usuario añade cosas a la cesta de la compra, por ejemplo 5 artículos, y se va a ver el carrito. El carrito muestra los 5 elementos. el usuario duplica la pestaña / ventana y se pone otra ficha del mismo carro (llámese lengüeta B). el usuario quita un elemento de la compra, por lo que ahora hay 4 elementos en la lengüeta B, pero en la pestaña A original, todavía hay 5 artículos. el usuario vuelve a la pestaña A y actualizaciones algo en el carro y hace clic en el botón "actualizar", que presenta los cambios. mi acción monorraíl trata de hacer un ARDataBind en ShoppingCartItems utilizando los datos de la vista, que incluye los 5 elementos. cuando se llega al punto de que el usuario ha eliminado de la lengüeta B, que arroja un "No fila con el identificador dado existe" para ese elemento.

No puedo averiguar si hay una manera de tenerlo se une esa fila, devolverá un valor nulo, devolver nueva instancia, etc? hay un parámetro AutoLoadBehavior en el atributo ARDataBind, pero que parece afectar sólo a la carga de las entidades secundarias, y no la entidad raíz. Independientemente de la opción que elija, tengo la excepción antes incluso de control entra en el método de acción (excepto AutoLoadBehavior.Never, pero que en realidad no me ayudan).

lugar, tengo código que llama Request.ObtainParamsNode () para tirar de los nodos de forma y analizar de forma manual en objetos, e ignora los que ya no existen. hay una manera mejor?

gracias.

¿Fue útil?

Solución

Heredar ARDataBinder , override FindByPrimaryKey(Type targetType, object id):

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

La clave aquí es la false parámetro, lo que hace que vuelva nulo en lugar de tirar.

A continuación heredar ARDataBindAttribute , reemplazar el método CreateBinder () y hacerlo volver a su nueva carpeta en lugar de la ARDataBinder por defecto.

A continuación, aplicar el atributo de carpeta de encargo en vez de ARDataBindAttribute.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top