“Uma das entradas de solicitação não válida” erro ao tentar atualizar o Azure Table Storage
-
25-09-2019 - |
Pergunta
Estou tentando atualizar uma entrada no Azure Table Storage. A função é:
public void SaveBug(DaBug bug)
{
bug.PartitionKey = "bugs";
bug.Timestamp = DateTime.UtcNow;
if (bug.RowKey == null || bug.RowKey == string.Empty)
{
bug.RowKey = Guid.NewGuid().ToString();
_context.AddObject(c_TableName, bug);
}
else
{
_context.AttachTo(c_TableName, bug);
_context.UpdateObject(bug);
}
_context.SaveChanges();
}
Se for uma nova entrada (o caminho "bug.rowkey == null"), então funciona bem. Se for uma atualização para uma entidade existente, o "Anexo" e o "UpdateObject" chama funcionam, mas quando chega a "SaveChanges", ele lança a exceção "uma das entradas de solicitação não válida".
A classe que está sendo armazenada é:
[DataContract]
[DataServiceKey("RowKey")]
public class DaBug
{
[DataMember]
public bool IsOpen { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public string SubmittedBy { get; set; }
[DataMember]
public DateTime SubmittedDate { get; set; }
[DataMember]
public string RowKey { get; set; }
public DateTime Timestamp { get; set; }
public string PartitionKey { get; set; }
}
Alguém sabe qual é o problema?
Obrigado por qualquer ajuda.
Solução
Caso alguém esteja procurando a resposta:
Trabalhando no contexto da tabela, tive que mudar a chamada de:
_context.AttachTo(c_TableName, bug);
para:
_context.AttachTo(c_TableName, bug, "*");
Outras dicas
Você também pode obter esse erro se definir o RowKey por engano como um valor que já usou (não que você tenha esse problema com o código na pergunta). Tentei empurrar mais de 50 entidades de uma só vez e acidentalmente tinha o Rowkey definido para o mesmo valor para duas das entidades.