4

Azure Table Storage のエントリを更新しようとしています。機能は次のとおりです。

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();
        }

新しいエントリ ("bug.RowKey == null" パス) の場合、問題なく動作します。それが既存のエンティティへの更新である場合、「AttachTo」と「UpdateObject」呼び出しは機能しますが、「SaveChanges」に到達すると、「要求入力の 1 つが無効です」という例外がスローされます。

格納されているクラスは次のとおりです。

[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; }
}

誰が問題が何であるか知っていますか?

助けてくれてありがとう。

4

2 に答える 2

6

誰かが答えを探している場合:

http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/0c9d476e-7970-422a-8b34-e987e41734df


テーブル コンテキストを調べて、呼び出しを次のように変更する必要がありました。

_context.AttachTo(c_TableName, bug); 

に:

_context.AttachTo(c_TableName, bug, "*"); 
于 2010-04-09T18:44:30.667 に答える
2

RowKey を誤って既に使用した値に設定した場合にも、このエラーが発生する可能性があります (問題のコードでこの問題が発生するわけではありません)。一度に 50 以上のエンティティをプッシュしようとしましたが、誤って 2 つのエンティティで RowKey が同じ値に設定されていました。

于 2012-09-12T14:55:24.007 に答える