使用 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 表存储时出现“未为实体中的所有属性指定值”错误的主要内容,如果未能解决你的问题,请参考以下文章