Получение сообщения "Не указаны значения для всех свойств объекта" при использовании хранилища таблиц Azure

Мой класс сущности

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 Service Bus, затем десериализую их и, наконец, пытаюсь сохранить их в хранилище таблиц 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();
    }
}

2 ответа

Решение

В соответствии с сообщением об ошибке и кодом, который вы указали, я обнаружил, что ваша сущность была построена неправильно. PartitionKey а также RowKey свойства должны быть указаны перед вставкой объекта в таблицу Azure. Вы можете попытаться изменить свой код следующим образом:

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 после того, как начал использовать Visual Studio 2022, как показано в следующем коде.

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

VS 2022 использует азурите вместо устаревшего эмулятора хранилища Azure , и, похоже, это проблема с эмулятором, поскольку этот код работает с VS 2019 и реальной средой Azure.

Поэтому, если вы можете начать использовать Visual Studio 2019, пока Азурите не станет более стабильной.

Другие вопросы по тегам