Pergunta

Eu tenho um aplicativo de carrinho de compras em execução no MonoRail e usando o Castle ActiveRecord/Nibernate, e há uma mesa de carrinho de compras e uma tabela de cartas de compras, que são mapeados para entidades.

Aqui está o cenário: um usuário adiciona coisas ao carrinho de compras, digamos 5 itens e vai ver o carrinho. O carrinho mostra todos os 5 itens. O usuário duplica a guia/janela e recebe outra guia do mesmo carrinho (ligue para a guia B). O usuário remove um item do carrinho, então agora existem 4 itens na guia B, mas na guia original, ainda existem 5 itens. O usuário remonta à guia A e atualiza algo no carrinho e clica no botão "Atualizar" que envia as alterações. Minha ação de monotrilho tenta fazer um Ardatabind em carcares de compras usando os dados da visualização, que inclui todos os 5 itens. Quando chega ao item que o usuário excluiu da guia B, ele lança uma "nenhuma linha com o identificador dado existe" para esse item.

Não consigo descobrir se existe uma maneira de não ligar essa linha, retornar nulo, retornar nova instância etc.? Existe um parâmetro automático automático no atributo Ardatabind, mas que parece afetar apenas o carregamento de entidades infantis, e não a entidade raiz. Independentemente de qual opção eu escolho, recebo a exceção antes mesmo do controle inserir o método de ação (exceto automaticamente o AutoloDbehavior.Never, mas isso realmente não me ajuda).

Em vez disso, tenho código que chama a request.ObtainParamsNode () para puxar os nós do formulário e analisá -los manualmente em objetos e ignora os que não existem mais. Existe uma maneira melhor?

obrigado.

Foi útil?

Solução

Herdar Ardatabinder, sobrepor FindByPrimaryKey(Type targetType, object id):

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

A chave aqui é o falso Parâmetro, o que o faz retornar nulo em vez de jogar.

Então herdar Ardatabindattribute, substitua o método createbinder () e faça com que ele retorne seu novo fichário em vez do Ardatabinder padrão.

Em seguida, aplique seu atributo de fichário personalizado em vez de ardatabindattribute.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top