Azure表存储-扩展ITableEntity的任何类型的常规下载

阿扎兰塔拉

我有四种自定义数据类型,每种类型都扩展了ITableEntity,这是WindowsAzure.Storage包的一部分

现在,我有四种从Azure表存储下载数据的方法。每个遵循以下格式:

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方法时),而我认为它应该是隐式的,因为它是的扩展ITableEntity

对于ITableEntity,我得到一个错误,即ExecuteQuery输入必须是具有公共无参数构造函数的非抽象类型。我的四个自定义类型都具有公共无参数构造函数。

我觉得我看到的问题更多是与不完全了解继承有关,更多的是与Azure表存储相关。任何指针,不胜感激。

我在很大程度上一直在关注本文档,但是没有针对非特定类型实体下载方法的示例。

马库斯·霍格隆德

您可以使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继承并具有公共emtpy构造函数的任何类型调用此方法(ExecuteQuery方法需要一个空的构造方法以创建实体

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章