1

バッチ オプションを使用して、Azure ストレージ テーブルにエンティティを保存しようとしています。

コードは次のとおりです。

foreach (TableEntity entity in entitiesList)
{
     ServiceContext.AddObject(entity.getTableName(), entity);
}

ServiceContext.SaveChangesWithRetries(SaveChangesOptions.Batch);

私はこの例外を取得しています:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code>InvalidInput</code>
  <message xml:lang="en-US">99:One of the request inputs is not valid.
RequestId:b54a78fe-30ae-427e-86e9-6107d6e3fe5a
Time:2013-01-14T15:50:17.0134794Z</message>
</error>

しかし、個別のクエリに各エンティティを追加しようとすると、機能します

しかし、私が理解していないのは、「Azure Storage Explorer」でazure sotageアカウントのテーブルを確認すると、ロードしようとしているデータが見つかりました!!

ServiceContext.SaveChangesWithRetries メソッドでバッチ オプションを使用するために、例外があるにもかかわらず Azure テーブルでデータを見つけた理由と、それを修正する方法を誰でも説明できますか

あなたの助けを前もって感謝します

4

2 に答える 2

2

バッチ オプションは、PartitionKey を 1 つだけ持つ最大 100 個のエンティティの追加のみをサポートします。100 を超えるエンティティを保存していないこと、およびすべてに 1 つのキーが含まれていることを確認してください。

バッチ エンティティ トランザクションの詳細については、http: //msdn.microsoft.com/en-us/library/windowsazure/dd894038.aspxをご覧ください。

于 2013-01-14T17:14:07.603 に答える
1

99: 要求入力の 1 つが無効です。

上記のメッセージの 99 は、バッチ内の 100 番目のエンティティ (0 から始まるインデックス) にエラーがあることを意味します。あなたがチェックできるいくつかのこと:

  1. エンティティ データが適切であることを確認してください。
  2. 「追加」操作を実行しているため、このエンティティがまだそこにないことを確認してください。「追加」操作の代わりに、エンティティの挿入または置換またはエンティティの挿入またはマージ操作を試すこともできます。

次のコードを見てください。

public class CustomerEntity : TableServiceEntity
{
    public CustomerEntity()
    {
        PartitionKey = "Customer";
        RowKey = Guid.NewGuid().ToString();
    }

    public string FirstName
    {
        get;
        set;
    }

    public string LastName
    {
        get;
        set;
    }

    public DateTime? LastOrderDate
    {
        get;
        set;
    }
}


    static void InsertEntityBatchOperation()
    {
        var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
        var cloudTableClient = storageAccount.CreateCloudTableClient();

        var customer = new CustomerEntity()
        {
            FirstName = "John",
            LastName = "Smith",
            LastOrderDate = DateTime.UtcNow.Date.AddDays(-10)
        };
        var serviceContext = cloudTableClient.GetDataServiceContext();
        serviceContext.AddObject(tableName, customer);
        customer = new CustomerEntity()
        {
            FirstName = "Jane",
            LastName = "Smith",
            LastOrderDate = DateTime.UtcNow.Date.AddDays(-5)
        };
        serviceContext.AttachTo(tableName, customer, null);
        serviceContext.UpdateObject(customer);
        customer = new CustomerEntity()
        {
            FirstName = "John",
            LastName = "Doe",
            LastOrderDate = DateTime.UtcNow.Date.AddDays(-7)
        };
        serviceContext.AttachTo(tableName, customer, null);
        serviceContext.UpdateObject(customer);
        customer = new CustomerEntity()
        {
            FirstName = "Jane",
            LastName = "Doe",
            LastOrderDate = DateTime.UtcNow.Date.AddDays(-3)
        };
        serviceContext.AttachTo(tableName, customer, null);
        serviceContext.UpdateObject(customer);
        //Following will perform Insert Or Merge Entity Operation
        serviceContext.SaveChangesWithRetries(SaveChangesOptions.Batch);
        //Following will perform Insert Or Replace Entity Operation
        serviceContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate);
    }
于 2013-01-14T17:46:31.070 に答える