我正在尝试使用EntityResolver
从 Azure 动态填充一个空对象,除非您省略调用,否则TableResult.Execute
调试不会进入该方法。它抛出一个异常,说明如下。实际的天蓝色表请求很好,在调试中我可以看到列值等,我只需要将它映射到本地类中,最好使用泛型和反射。Test
match.SetValue
Method not found: 'System.Nullable`1<Int32> Microsoft.WindowsAzure.Storage.Table.EntityProperty.get_Int32Value()'.
我认为问题与反思有关,但需要帮助。
public T RetrieveRow(string partitionKey, string rowKey)
{
EntityResolver<IObTable> resolver = (pk, rk, ts, props, etag) => Test(props);
CloudTable table = base.TableClient.GetTableReference(TableName);
TableOperation operation = TableOperation.Retrieve<IObTable>(partitionKey, rowKey, resolver);
TableResult retrievedResult = table.Execute(operation);
return (T)retrievedResult.Result;
}
public IObTable Test(IDictionary<string, EntityProperty> storageProps)
{
IObTable objectToReturn = (IObTable)Activator.CreateInstance(typeof(T));
if (storageProps != null)
{
var emptyObjectProps = objectToReturn.GetType().GetProperties();
foreach (var prop in storageProps)
{
PropertyInfo match = emptyObjectProps.FirstOrDefault(v=> v.Name==prop.Key);
if (match!=null)
{
if (match.PropertyType == typeof(Int32))
{
match.SetValue(prop, storageProps[match.Name].Int32Value);
}
}
}
}
return objectToReturn;
}
IObTable
只是我本地实体上的标记界面。
非常感谢任何帮助。