2010-07-24 6 views
1

J'ai un client Silverlight avec une grille qui obtient des données du service de données WCF. Fonctionne bien.WCF Data Services UpdateObject ne fonctionne pas

Toutefois, si je veux mettre à jour une ligne de la grille a changé, le contexte de données de service UpdateObject ne fonctionne pas:

DataServiceContext.UpdateObject(MyGrid.SelectedItem); 
    foreach (Object item in DataServiceContext.Entities) 
    { 
     // 
    } 
    DataServiceContext.BeginSaveChanges(SaveChangesOptions.Batch, OnChangesSaved, DataServiceContext); 

Je viens de créer une boucle pour contrôler les valeurs des éléments des entités et la valeur est mis à jour du tout. BeginSaveChanges fonctionne correctement, mais n'utilise que des valeurs non mises à jour.

Des idées pour résoudre ce problème?

grâce

Répondre

0

un droit SaveChanges complètement vidées qui affiche le message d'erreur si EndSaveChanges() échoue, comme l'exemple de code ci-dessous. Évidemment, vous ne pouvez pas utiliser la console pour écrire votre message dans Silverlight, mais vous avez l'idée.

Par exemple, quand je l'ai écrit l'exemple suivant, je trouve que je devenais une erreur interdite, parce que mon entité ensemble avait EntitySetRights.AllRead, pas EntitySetRights.All

class Program 
    { 
     private static AdventureWorksEntities svc; 

     static void Main(string[] args) 
     { 
      svc = 
       new AdventureWorksEntities(
        new Uri("http://localhost:5068/AWDataService.svc", 
         UriKind.Absolute)); 
      var productQuery = from p in svc.Products 
        where p.ProductID == 740 
        select p; 
      var product = productQuery.First(); 
      ShowProduct(product); 
      product.Color = product.Color == "Silver" ? "Gray" : "Silver"; 
      svc.UpdateObject(product); 
      svc.BeginSaveChanges(SaveChangesOptions.Batch, OnSave, svc); 
      ShowProduct(product); 
      Console.ReadKey(); 
     } 

     private static void ShowProduct(Product product) 
     { 
      Console.WriteLine("Id: {0} Name: {1} Color: {2}", 
       product.ProductID, product.Name, product.Color); 
     } 

     private static void OnSave(IAsyncResult ar) 
     { 
      svc = ar.AsyncState as AdventureWorksEntities; 
      try 
      { 
       WriteResponse(svc.EndSaveChanges(ar)); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 

     private static void WriteResponse(DataServiceResponse response) 
     { 
      if(response.IsBatchResponse) 
      { 
       Console.WriteLine("Batch Response Code: {0}", response.BatchStatusCode); 
      } 
      foreach (ChangeOperationResponse change in response) 
      { 
       Console.WriteLine("Change code: {0}", change.StatusCode); 
       if(change.Error != null) 
       { 
        Console.WriteLine("\tError: {0}", change.Error.Message); 
       } 
      } 
     } 
    } 
Questions connexes