6

TimeSpanAzure Table Storage に保存したいプロパティを持つエンティティがあります。エンティティを保存しようとすると、次のエラーが表示されます。

サポートされていないタイプ 'TimeSpan' にキャストできません

自動変換を行う方法やその他のサポート方法はありTimeSpanますか?

4

5 に答える 5

4

TimeSpan を int または bigint フィールドにティックとして格納し、それを変換します。varchar として保存することもできます。必要に応じてデータベースで計算を行うことができ、範囲の比較が容易になるため、私はティックを好みます。Entity Framework を使用している場合は、データベースに適したプロパティから TimeSpan を取得および設定するマップされていないプロパティを宣言できます。

Azure テーブルのエンティティをご覧ください。その一部は、Azure Table Storage からプロパティを除外する方法を説明しています。これにより、私が EF で提案したことを ATS でも実行できるはずです。

于 2012-07-06T15:48:35.323 に答える
1

TimeSpantype および null 許容TimeSpan?型でさえ、Azure Storage SDK > v8.0.0 でサポートされています。

静的ヘルパー メソッドTableEntity.Flattenメソッドを使用してエンティティをフラット化し、テーブル ストレージに書き込みます。

https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.tableentity.flatten.aspx

テーブルからエンティティを読み取るときは、メソッドを使用して元のエンティティに変換しますTableEntity.Convertback

https://msdn.microsoft.com/en-us/library/azure/mt775432.aspx

Flatten メソッドと Convertback メソッドは、IEnumerable / ICollection タイプのインデックス付きプロパティを除く、ほぼすべてのタイプのプロパティをサポートします。

TableEntity.Flatten呼び出しとメソッドの下にある TableEntityAdapter クラスをConvertBack作成し、開発者が簡単に使用できるようにしました。

あなたがする必要があるのは、オブジェクトをこのアダプターに渡すことだけです。 https://www.nuget.org/packages/TableEntityAdapter/

Flatten メソッドと ConvertBack メソッドが裏でどのように機能するかをもう少し知りたい場合は、私が書いた記事を参照してください。 https://www.nuget.org/packages/ObjectFlattenerRecomposer/

于 2017-04-08T21:10:45.777 に答える
0

Microsoftクライアントで制限に遭遇したため、多くの高レベルの抽象化を使用して、代替のAzureテーブルストレージクライアントであるLucifureStashを作成しました。

Lucifure Stashは、64Kを超えるデータ列、リスト、配列、列挙、シリアル化、モーフィング、パブリックおよびプライベートのプロパティとフィールドなどをサポートします。個人使用は無料で、 http: //www.lucifure.comまたはNuGet.com(http://nuget.org/packages/LucifureStash)からダウンロードできます。

これを使用して、TimeSpanをAzureStorageTablesでサポートされているデータ型に簡単にモーフィングできます。

于 2012-07-06T16:15:47.317 に答える
0

JamieSeeが提案したように、TimeSpanをティックとして長い整数に格納できるので、オブジェクトをバイト配列にシリアル化することもできます。

どんな複雑な/サポートされていないクラスを持っていても、いつでもそれをバイト配列にシリアル化してアップロードし、それを取得して逆シリアル化し、それがどんなタイプでもキャストバックできます。KeyValuePairsのリストをアップロードする必要があるときにこれを行いました。

プロパティgetterおよびsetterで自動変換を作成できます。

于 2012-07-07T13:19:09.963 に答える