2010-07-22 5 views
0

J'ai rencontré un problème lors de la mise à jour des objets avec ADO.NET Data Services.Le service de données ADO.NET ne met pas à jour

D'abord, j'ai créé un service qui peut charger et stocker les données. C'est un contexte de données de base qui implémente l'interface IUpdatable. Après cela, j'ai créé un simple client de service. Je viens de le créer avec la référence 'Ajouter un service' dans Visual Studio. Fondamentalement, ce service semble fonctionner. Je peux interroger les objets et stocker de nouveaux objets. Cependant, je ne peux pas mettre à jour les objets.

Ceci est mon code mise à jour sur le client:

 var ctx = 
      new TeamDataContext(new Uri("http://localhost:8637/TeamInfoService.svc")); 
     var team = ctx.Teams.First(); 
     team.TeamName = "New Team Name"; 
     ctx.UpdateObject(team); 

     ctx.SaveChanges(); 

Quel est mon principal problème, que IUpdatable.SetValue() n'est pas appelé à l'objet que je veux mettre à jour. Seul le IUpdatable.SaveChanges() est appelé sans mettre à jour les objets sur le serveur.

Lorsque je crée un nouvel objet, IUpdatable.SetValue est appelée sur le serveur pour définir la propriété.

Alors qu'est-ce que je fais mal? Mes attentes sont-elles fausses? IUpdatable.SetValue est-il censé être appelé lors de la mise à jour d'un objet? Ou dois-je faire des choses supplémentaires pour faire des mises à jour? Edit: Je viens de regarder les requêtes HTTP entre le client et le serveur. Le client envoie une requête HTTP-Merge avec les modifications. Cependant je ne sais toujours pas pourquoi les changements ne sont pas stockés.

Répondre

1

Je viens de découvrir quel est le problème et se sentir comme un idiot en ce moment. La propriété TeamName était la clé de l'objet. Bien sûr, lorsque vous changez la clé, elle ne peut plus trouver l'objet à mettre à jour. Et par conséquent, il ne peut pas mettre à jour la propriété.

Donc, n'essayez jamais de mettre à jour la clé de l'objet =)

+1

C'est un peu différent en fait. Il devrait toujours trouver l'objet (le contexte se souvient du lien avec l'entité sans tenir compte de la valeur de la clé), mais le serveur ignorera udpates à la propriété key, car cela changerait l'identité de l'entité, ce qui n'est pas autorisé. Notez qu'il le fera silencieusement (par conception). –

+0

Merci pour une explication plus précise – Gamlor

Questions connexes