2010-10-12 4 views
0

J'essaie d'exposer une table de stockage de table Azure modifiable. (Si c'est important: pour gagner Phone 7 via le ODTP Client Lib CTP.) Du côté serveur, j'ai un DataServiceContext: TableServiceContext, IDataServiceUpdateProviderComment puis-je mettre à jour la ressource Azure Table Storage en implémentant IDataServiceUpdateProvider?

Je peux ajouter et supprimer des objets, mais quand j'essaye de mettre à jour une ressource, SaveChanges() ne semble pas "ramasser" les valeurs qui ont été assignées dans les appels à SetProperty.

//Works fine 
public object GetResource(IQueryable query, string fullTypeName) 
    { 
     var resource = query.Cast<MyDataModel>().SingleOrDefault(); 
     if (fullTypeName != null && resource.GetType().FullName != fullTypeName) 
     { 
      throw new ApplicationException("Unexpected type for this resource"); 
     } 
     return resource; 
    } 

//Seems to work fine: gets called for each property. 
public void SetValue(object targetResource, string propertyName, object propertyValue) 
    { 
     var propInfo = targetResource.GetType().GetProperty(propertyName); 
     propInfo.SetValue(targetResource, propertyValue, null); 
    } 

//This gets called, but resource is not updated 
void IUpdatable.SaveChanges() 
    { 
     //Forwarding from IUpdatable.SaveChanges() to DataServiceContext.SaveChanges() 
     base.SaveChanges(); 
    } 

MISE À JOUR: La réponse était d'appeler UpdateObject() pendant SetValue():

public void SetValue(object targetResource, string propertyName, object propertyValue) 
    { 
     var propInfo = targetResource.GetType().GetProperty(propertyName); 
     propInfo.SetValue(targetResource, propertyValue, null); 
     UpdateObject(targetResource); 
    } 

Répondre

0

MISE À JOUR: La réponse était d'appeler UpdateObject() pendant SetValue():

public void setValue (object targetResource, string propertyName, objet propertyValue) { var propInfo = targetResource.GetType(). GetProperty (propertyName); propInfo.SetValue (targetResource, propertyValue, null); UpdateObject (targetResource); }

Questions connexes