使用 Azure 表存储时出现“未为实体中的所有属性指定值”错误

Posted

技术标签:

【中文标题】使用 Azure 表存储时出现“未为实体中的所有属性指定值”错误【英文标题】:Getting "The values are not specified for all properties in the entity" error while using Azure Table Storage 【发布时间】:2017-03-31 09:02:35 【问题描述】:

我的实体类

public class VerifyVariableEntity : TableEntity

    public VerifyVariableEntity()
    

    

    public VerifyVariableEntity(string consumerId, string score)
    
        PartitionKey = consumerId;
        RowKey = score;
    
    public string ConsumerId  get; set; 

    public string Score  get; set; 

我正在从 Azure 服务总线队列中获取数据,然后对其进行反序列化,最后尝试将其存储到 Azure 表存储中。 下面是我从服务总线队列中获取数据并将其存储到 Azure 表存储中的实现。

class Program

    static void Main(string[] args)
    
        var connectionString = "myconnectionString";

        var queueName = "myqueueName";

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        CloudTable table = tableClient.GetTableReference("test");

        table.CreateIfNotExists();

        var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
        client.OnMessage(message =>
        
            var bodyJson = new StreamReader(message.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();
            var myMessage = JsonConvert.DeserializeObject<VerifyVariable>(bodyJson);
            Console.WriteLine(bodyJson);
            Console.WriteLine(myMessage.ConsumerId);
            Console.WriteLine(myMessage.Score);

            var VerifyVariableEntityObject = new VerifyVariableEntity()
            
                ConsumerId = myMessage.ConsumerId,
                Score = myMessage.Score
            ;

            TableOperation insertOperation = TableOperation.Insert(VerifyVariableEntityObject);
            // Execute the insert operation.
            table.Execute(insertOperation);
        );


        Console.ReadLine();
    

【问题讨论】:

【参考方案1】:

在我开始使用 Visual Studio 2022 后,我在使用 Azure Storage Delete entity 命令时看到了这个错误,如下面的代码。

using Microsoft.WindowsAzure.Storage.Table.CloudTable
....
var tableOperation = TableOperation.Delete(entity);
return await CloudTable.ExecuteAsync(tableOperation);

VS 2022 使用 Azurite 而不是旧的 Azure Storage Emulator,这似乎是模拟器的问题,因为该代码正在使用 VS 2019 和实时 Azure环境。

所以,如果您可以开始使用 Visual Studio 2019,直到 Azurite 变得更加稳定。

【讨论】:

【参考方案2】:

根据您提供的错误信息和代码,我发现您的实体构造不正确。在将实体插入 Azure 表之前,需要指定 PartitionKeyRowKey 属性。您可以尝试如下修改您的代码:

var VerifyVariableEntityObject = new VerifyVariableEntity()

   ConsumerId = myMessage.ConsumerId,
   Score = myMessage.Score,
   PartitionKey=myMessage.ConsumerId,
   RowKey=myMessage.Score
;

var VerifyVariableEntityObject = new VerifyVariableEntity(myMessage.ConsumerId,myMessage.Score)

   ConsumerId = myMessage.ConsumerId,
   Score = myMessage.Score
;

【讨论】:

我可以通过代码检索插入的记录,但是在云存储的表下看不到Azure Portal上的记录。我是 Azure 的新手,所以我想知道在 Azure 门户上反映插入的记录需要多长时间。 您只能在 Azure 门户上看到表名列表。这是官方的工具Azure Storage Explorer,供您管理存储资源。您可以关注此tutorial 以开始使用 Azure 存储资源管理器。

以上是关于使用 Azure 表存储时出现“未为实体中的所有属性指定值”错误的主要内容,如果未能解决你的问题,请参考以下文章

上传到 Azure 存储时出现内部 500 错误

使用 Azure 存储 PHP SDK 时出现“其中一个请求输入超出范围”

JS Azure 博客存储 - 运行时出现需要错误?

尝试将数据库导出到 Azure 中的存储帐户时出现 403 错误

Azure Databricks 在 Blob 存储上打开文件时出现问题

为 Azure 存储帐户创建专用终结点连接时出现 ResourceNotFound 错误