“Uma das entradas de solicitação não válida” erro ao tentar atualizar o Azure Table Storage

StackOverflow https://stackoverflow.com/questions/2608044

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.

Foi útil?

Solução

Caso alguém esteja procurando a resposta:

http://social.msdn.microsoft.com/forums/en-us/windowszure/thread/0c9d476e-7970-422a-8b34-e987e41734df


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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top