Azure Table Storage获取单个实体报CS0310错误,求排查
Azure Table Storage 获取实体失败的问题解决
错误信息
Error CS0310 'SomeClass' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'TableClient.GetEntity
(string, string, IEnumerable , CancellationToken)'
问题原因及修复方案
1. 实体类缺少公共无参构造函数
Azure Table Storage SDK在反序列化实体时,要求目标类必须具备公共无参构造函数,你的SomeClass仅定义了带参构造函数,导致SDK无法实例化对象完成反序列化。同时SomeNumber是只读属性,反序列化时无法赋值,需要调整为可读写。
修改后的SomeClass代码:
public class SomeClass: ITableEntity { // 添加公共无参构造函数 public SomeClass() { ETag = new ETag("*"); } public SomeClass(string someKey, int someNumber) : this() { PartitionKey = someKey; RowKey = someKey; SomeNumber = someNumber; } public string PartitionKey { get; set; } public string RowKey { get; set; } public DateTimeOffset? Timestamp { get; set; } public ETag ETag { get; set; } // 修改为可读写属性,确保反序列化能赋值 public int SomeNumber { get; set; } }
注:Timestamp字段由Azure Table Storage自动维护,无需手动初始化赋值。
2. 获取实体时泛型类型不匹配
在AzureTableClient的GetSomeNumber方法中,你错误地使用了TodaysZipCount作为泛型类型,但实际对应的实体类是SomeClass,导致类型不匹配。
修改后的GetSomeNumber方法:
public int GetSomeNumber(string someKey) { var tableClient = CreateTableServiceClient(); // 修正泛型类型为SomeClass return tableClient.GetEntity<SomeClass>(rowKey: someKey, partitionKey: someKey).Value.SomeNumber; }
内容的提问来源于stack exchange,提问作者LxstInNxght
相关产品推荐
相关产品推荐

