2

Microsoft Windows Azure ストレージ テーブルを使用する作業を開始しています。すべて正常に動作しているようです。テーブルを作成して行を挿入できますが、問題が 1 つあります。事前に定義された行キー フィールド、つまり「PartitionKey」、「RowKey」以外のものを使用して行を挿入できないようです。そして「タイムスタンプ」。

以下のサンプル コードは、MVC アプリケーションの最も単純な "Hello World" です (追加したのはコントローラーだけです)。出力は、期待される値がパーティション キーと行キーにあることを示していますが、挿入しようとした「テスト フィールド」はまだ空です。

デバッガーでコードにステップ インすると、最初の table.Execute() が発生したときに、設定しようとしているテスト フィールドの名前と値が設定されていることがわかります。しかし、何らかの理由で、実際には表に出ません。

どんな助けでも大歓迎です。

using System;
using System.Configuration;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using System.Web.Mvc;


namespace HelloWorldApp.Controllers
{
    public class TestEntity : TableEntity
    {
        public string TestField;

        public TestEntity() { }

        public TestEntity(string partitionKey, string rowKey, string testField)
        {
            PartitionKey = partitionKey;
            RowKey = rowKey;

            TestField = testField;
        }
    }

    public class HomeController : Controller
    {
        public string Index()
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

            if (storageAccount == null)
                return "Storage Account is Null";

            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
            if (tableClient == null)
                return "Table Client is Null";

            CloudTable table = tableClient.GetTableReference("TestTable");
            if (table == null)
                return "Table is Null";

            table.CreateIfNotExists();

            var entity = new TestEntity("MyTestPartitionKey", "MyTestRowKey", "MyTestMessage");

            var doInsert = TableOperation.Insert(entity);

            if (doInsert == null)
                return "Insert Operation is Null";

            // In debugger, I have confirmed that doInsert does include the field TestField="MyTestMessage", yet it doesn't seem to find its way into the table.
            table.Execute(doInsert);

            var doRetrieve = TableOperation.Retrieve<TestEntity>("MyTestPartitionKey", "MyTestRowKey");

            TableResult retrievedResult = table.Execute(doRetrieve);

            if (retrievedResult == null)
                return "Retrieved no rows";

            string retPartitionKey = ((TestEntity) retrievedResult.Result).PartitionKey;
            string retRowKey = ((TestEntity) retrievedResult.Result).RowKey;
            string retTestMessage = ((TestEntity) retrievedResult.Result).TestField;

            return String.Format("Partition: {0}, Row: {1}, TestMessage {2}, remember to delete table.", retPartitionKey, retRowKey, retTestMessage);
        }
    }
}
4

1 に答える 1

3

get;set; で TestField をプロパティに変換しようとしましたか?

TestEntity で次のコードを試してください。

public class TestEntity : TableEntity
    {
        public string TestField { get; set; }

        public TestEntity() { }

        public TestEntity(string partitionKey, string rowKey, string testField)
        {
            PartitionKey = partitionKey;
            RowKey = rowKey;

            TestField = testField;
        }
    }
于 2013-03-13T00:35:46.440 に答える