Modelo de apresentação de serviços da RIA com relacionamentos 1-muitos ou muitos muitos

StackOverflow https://stackoverflow.com/questions/2152623

Pergunta

Estou tentando obter um modelo de apresentação (discutido aqui e aqui) Trabalhando na RIA. Todos os exemplos que posso encontrar são entidades de dados simples e simples, sem relacionamentos 1 ou muitos, que são o que não consigo trabalhar-especificamente, em atualizações e inserções em relacionamentos associativos.

Consultas que posso trabalhar bem - tenho minhas aulas de apresentação marcadas com atributos de associação (e incluem atributos, quando apropriado), e tenho um bom entendimento sobre como os dados são carregados no lado do cliente e mantidos lá como entidades. Eu também tenho inserções de novas entidades cobertas. No entanto, estou enfrentando os seguintes problemas. Para os exemplos a seguir, suponha que tenhamos um álbum simples e entidades de artistas, onde um álbum tem um único artista e um artista pode ter zero em muitos álbuns. Ambos têm uma propriedade de nome.

  • No lado do cliente, se eu fizer myartist.albums.add (analbum) ou myartist.albums.remove (analbum), nada acontece. Haschanges retorna falsos. (Observe que o MyArtist e o Analbum foram obtidos exclusivamente no código carregando as entidades e iterando obter referências a entidades específicas: ainda não estou fazendo nada na interface do usuário ou com o DomaInDatasources, apenas ficando ao redor).
  • Se eu atualizar o nome em um artista e submitanger, quando o método de atualização é chamado no servidor, a coleção de álbuns será nula.

Alguém tem alguma sugestão ou você pode me apontar para um exemplo que usa objetos mais complexos?

EDITAR (Mantendo o exposto para a posteridade): Tudo bem, parece que a segunda edição (uma referência a uma entidade ou uma coleção de entidades mostrando como nula quando a atualização é chamada no servidor) existe porque a criança está marcada como alterada e alterada e Então eles não estão sendo serializados e enviados de volta. Sei que você pode forçar isso a acontecer usando [composição] e eu o fiz funcionar dessa maneira, mas esse não é um relacionamento de composição e eu quero que as duas entidades sejam entidades de "nível superior". Como posso marcar uma entidade como alterada?

Foi útil?

Solução

O problema era que meus atributos [de associação] não foram definidos corretamente. Não percebi que a propriedade de nome da associação deve ser a mesma nos dois lados da associação. Quando os nomes são os mesmos e você faz uma construção, o código gerado no cliente usa um construtor diferente para a entidade -collection usada pelo "pai" para se referir aos "filhos" do que se as associações não forem configuradas . O novo construtor leva retornos de chamada que fazem um pouco de manuseio extra quando você liga para adicionar e remover na coleção - especificamente, eles levam a entidade filho que você está adicionando ou removendo e modificando a propriedade nela que se refere aos seus pais para que tudo permaneça Em sincronia: a coleção da qual você removeu o objeto, a coleção a que a adicionou e a referência do objeto ao seu pai.

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