Получение сообщения "Не указаны значения для всех свойств объекта" при использовании хранилища таблиц 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, пока Азурите не станет более стабильной.