从<t>到'Microsoft.WindowsAzure.Storage.Table.ITableEntity'没有装箱转换或类型参数转换

时间:2017-09-08 19:04:30

标签: c# azure abstract-class azure-storage

背景

我正在尝试按照以下教程从Azure存储表中接收一些值。

检索分区中的所有实体 - https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet

问题

我收到两个错误,如下所示,我无法弄清楚如何纠正它们。

我80%确定问题与第二个错误无关,因为我的模型是非抽象类型,带有公共无参数构造函数。

错误消息

  

“AzureStorageTableEntites”类型不能用作类型参数   泛型类型或方法中的“TElement”   “CloudTable.ExecuteQuery(TableQuery,   TableRequestOptions,OperationContext)'。没有拳击转换   或者从'AzureStorageTableEntites'输入参数转换   'Microsoft.WindowsAzure.Storage.Table.ITableEntity'。

  

'AzureStorageTableEntites'必须是带有public的非抽象类型   无参数构造函数,以便将其用作参数'TElement'   在泛型类型或方法中   “CloudTable.ExecuteQuery(TableQuery,   TableRequestOptions,OperationContext)'

错误表明调用方法的这一部分存在问题:

       // Print fields.
        foreach (AzureStorageTableEntities entity in table.ExecuteQuery<AzureStorageTableEntities>(query))
        {

        }

更具体地说,这一部分:

table.ExecuteQuery<AzureStorageTableEntities>(query)

代码

我的模型包括:

 public class AzureStorageTableEntities : TableEntity
    {
        public AzureStorageTableEntities() { }

        public bool MiJobsMessageQueueToggle { get; set; }
        public bool DeadLetterQueueToggle { get; set; }
        public bool ServiceBusQueueToggle { get; set; }
        public bool MiJobsMessageAgeToggle { get; set; }
        public DateTime SpecificCheckTime { get; set; }
        public int HourlyCheckInternalToggle { get; set; }
        public bool MiJobsExceptionLogToggle { get; set; }
        public bool SpecificCheckTimeToggle { get; set; }
    }

通话方式:

   private void GetStorageTableValues<AzureStorageTableEntities>()
    {
        // Retrieve the storage table name.
        var tableName = CloudConfigurationManager.GetSetting("AzureConfigTableName");

        // Retrieve the storage account from the connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Create the CloudTable object that represents the storage table.
        CloudTable table = tableClient.GetTableReference(tableName);

        TableQuery<AzureStorageTableEntities> query = new TableQuery<AzureStorageTableEntities>()
        .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Key"));

        // Print fields.
        foreach (AzureStorageTableEntities entity in table.ExecuteQuery<AzureStorageTableEntities>(query))
        {

        }
    }

2 个答案:

答案 0 :(得分:1)

似乎是一个错字问题。您复制的错误说AzureStorageTableEntites与您复制的类称为AzureStorageTableEntities。您复制的类AzureStorageTableEntities看起来不错,它已经通过其基类实现ITableEntity,具有无参数ctor并且它是非抽象的。如果你修正了错字并使用那个课你应该很高兴。还使用ExecuteQuery的通用版本

答案 1 :(得分:0)

问题是方法签名中的泛型类型。一旦我删除了这一切一切按预期工作。

private void GetStorageTableValues<AzureStorageTableEntities>()

改为此。

private void GetStorageTableValues()