Azure Table 存储 - 扩展 ITableEntity 的任何类型的通用下载
Azure Table Storage - Generic download for any type extending ITableEntity
我有四种自定义数据类型,每一种都扩展了 ITableEntity
,它是 WindowsAzure.Storage
包的一部分。
现在,我有四种不同的方法从 Azure Table 存储下载数据。每个都遵循以下格式:
public List<MyCustomEntity> DownloadMyCustomEntities(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<MyCustomEntity> query = new TableQuery<MyCustomEntity>();
return new List<MyCustomEntity>(table.ExecuteQuery(query));
}
我尝试创建一个共享函数,而不是为我的每个自定义实体类型使用这些方法之一。我希望这是可能的,因为我所有的自定义类型都继承自 ITableEntity
.
这是我尝试过的:
public List<TableEntity> DownloadAnyEntity(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<TableEntity> query = new TableQuery<TableEntity>();
return new List<TableEntity>(table.ExecuteQuery(query));
}
我已经用 TableEntity
和 ITableEntity
试过了,但我总是出错。对于 TableEntity
,我的错误是我实际需要的类型不存在转换(当我调用 DownloadAnyEntity
方法时),而我认为它应该是隐式的,因为它是 [=13= 的扩展].
对于 ITableEntity
,我得到一个错误,即 ExecuteQuery
输入必须是具有 public 无参数构造函数的非抽象类型。我所有的四个自定义类型都有 public 个无参数构造函数。
我觉得我看到的问题更多是因为没有完全理解继承,更多的是它是 Azure Table 存储特定的。非常感谢任何指针。
我基本上一直在关注 this documentation,但没有非类型特定实体下载方法的示例。
您可以使 DownloadAnyEntity 方法具有类型参数约束的泛型
public List<T> DownloadAnyEntity<T>(string tableId) where T: ITableEntity, new()
{
// Reference the CloudTable object
var tableRef = tableClient.GetTableReference(tableId);
var query = new TableQuery<T>();
return tableRef.ExecuteQuery(query).ToList();
}
然后可以为从 ITableEntity 继承并具有 public 空构造函数的任何类型调用此方法(ExecuteQuery 方法需要空构造函数才能创建实体)
我有四种自定义数据类型,每一种都扩展了 ITableEntity
,它是 WindowsAzure.Storage
包的一部分。
现在,我有四种不同的方法从 Azure Table 存储下载数据。每个都遵循以下格式:
public List<MyCustomEntity> DownloadMyCustomEntities(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<MyCustomEntity> query = new TableQuery<MyCustomEntity>();
return new List<MyCustomEntity>(table.ExecuteQuery(query));
}
我尝试创建一个共享函数,而不是为我的每个自定义实体类型使用这些方法之一。我希望这是可能的,因为我所有的自定义类型都继承自 ITableEntity
.
这是我尝试过的:
public List<TableEntity> DownloadAnyEntity(string tableId)
{
// Reference the CloudTable object
CloudTable table = tableClient.GetTableReference(tableId);
TableQuery<TableEntity> query = new TableQuery<TableEntity>();
return new List<TableEntity>(table.ExecuteQuery(query));
}
我已经用 TableEntity
和 ITableEntity
试过了,但我总是出错。对于 TableEntity
,我的错误是我实际需要的类型不存在转换(当我调用 DownloadAnyEntity
方法时),而我认为它应该是隐式的,因为它是 [=13= 的扩展].
对于 ITableEntity
,我得到一个错误,即 ExecuteQuery
输入必须是具有 public 无参数构造函数的非抽象类型。我所有的四个自定义类型都有 public 个无参数构造函数。
我觉得我看到的问题更多是因为没有完全理解继承,更多的是它是 Azure Table 存储特定的。非常感谢任何指针。
我基本上一直在关注 this documentation,但没有非类型特定实体下载方法的示例。
您可以使 DownloadAnyEntity 方法具有类型参数约束的泛型
public List<T> DownloadAnyEntity<T>(string tableId) where T: ITableEntity, new()
{
// Reference the CloudTable object
var tableRef = tableClient.GetTableReference(tableId);
var query = new TableQuery<T>();
return tableRef.ExecuteQuery(query).ToList();
}
然后可以为从 ITableEntity 继承并具有 public 空构造函数的任何类型调用此方法(ExecuteQuery 方法需要空构造函数才能创建实体)