gpt4 book ai didi

c# - 使用反射的 Azure Table SDK 2 EntityResolver

转载 作者:行者123 更新时间:2023-12-03 06:04:25 27 4
gpt4 key购买 nike

我尝试使用 EntityResolver 从 Azure TableResult.Execute 动态填充空对象,调试无法进入 Test 方法除非您省略 match.SetValue 调用。它抛出一个异常,说明如下。实际的 azure 表请求很好,在调试中我可以看到列值等,我只需要将其映射到本地类,最好使用泛型和反射。

Method not found: 'System.Nullable`1<Int32> Microsoft.WindowsAzure.Storage.Table.EntityProperty.get_Int32Value()'.

我认为问题与反射(reflection)有关,但需要帮助。

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 只是我本地实体上的一个标记接口(interface)。

非常感谢任何帮助。

最佳答案

改变这个:match.SetValue(prop, storageProps[match.Name].Int32Value);

对此:match.SetValue(objectToReturn, storageProps[match.Name].Int32Value);

关于c# - 使用反射的 Azure Table SDK 2 EntityResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com