Как обновить ресурс хранилища таблиц Azure, реализовав IDataServiceUpdateProvider? - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь открыть редактируемую таблицу хранения таблиц Azure.(Если это имеет значение: для Win Phone 7 через OData Client Lib CTP.) На стороне сервера у меня есть DataServiceContext: TableServiceContext, IDataServiceUpdateProvider

, я могу добавлять и удалять объекты, но когда я пытаюсь обновитьресурс SaveChanges (), по-видимому, не «подхватывает» значения, которые были назначены в вызовах 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();
    }

ОБНОВЛЕНИЕ: ответом был вызов функции UpdateObject () во время SetValue ():

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

1 Ответ

0 голосов
/ 12 октября 2010

ОБНОВЛЕНИЕ: Ответ должен был вызвать UpdateObject () во время SetValue ():

public void SetValue (объект targetResource, строковое propertyName, объект propertyValue) {var propInfo = targetResource.GetType (). GetProperty (propertyName);propInfo.SetValue (targetResource, propertyValue, null);UpdateObject (targetResource);}

...