Recurso não encontrado para o segmento 'propriedade'
-
21-08-2019 - |
Pergunta
Ao usar o cliente ADO.Net Data Services para atualizar uma entidade chamando o LoadProperty
:
ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ...
Ela lança um erro no servidor se a propriedade é null
Erro: exceção lançada: System.Data.Services.DataServiceException: Recurso não encontrado para o segmento 'proprietário'. em System.Data.Services.RequestDescription.GetSingleResultFromEnumerable (SegmentInfo segmentInfo) a System.Data.Services.DataService1.CompareETagAndWriteResponse (RequestDescription descrição, ContentFormat ResponseFormat, IDataService DataService)
em System.Data.Services.DataService1.SerializeResponseBody (RequestDescription Descrição, IDataService DataService) a System.Data.Services.DataService1.HandleNonBatchRequest (RequestDescription descrição) em System.Data.Services.DataService`1.HandleRequest ()
O problema é que o cliente não sabe se a propriedade é null
ou apenas ainda não foi preenchido. A propriedade proprietário é um link de um Vehicle
a um Customer
.
Todas as ideias que há de errado?
Graças
Solução
Consultando em chaves primárias gerar uma exceção quando a chave não existe. A solução é adicionar uma verdadeira expressão manequim no estado (por exemplo: 1 == 1 && item.Id == XXX).
Sem a expressão manequim o pedido ADO.NET é:
http: //localhost//test.svc/Role(XXX)
Com a condição de manequim, o pedido é:
http: //localhost//test.svc/Role()?$filter=true e (Id eq 1)
O comportamento esperado (null retornado) está correto no segundo caso.
Outras dicas
IgnoreResourceNotFoundException propriedade do contexto de serviço true:
svc.IgnoreResourceNotFoundException = true;
Eu recebi um "recurso não encontrado para o segmento 'Propriedade'" erro também. Mina parece ser que na cláusula where Estou procurando pela chave primária. Eu encontrei alguns recursos que dizem que irá lançar um erro (mesmo quando se usa FirstOrDefault ()) ao usar uma chave primária que não existe (em oposição a outra, onde cláusulas que simplesmente não fornecem resultados). Eu acho que uma coisa semelhante está acontecendo com você.