【发布时间】:2017-01-30 21:06:14
【问题描述】:
背景
假设我有一个 Azure 表实体
class MyEntity : TableEntity
{
public string LongString { get; set; }
public bool IsCompressed { get; set; }
}
如果LongString > 64KB(Azure 对属性的限制),我想将LongString 压缩保存。
为此,我有 Compress(string) 和 Decompress(string) 两个函数
目前,在每次插入之前,我都会检查 LongString 的长度,如果它 > 64KB,我会设置 LongString = Compress(LongString) 和 IsCompressed = true。
每次 Azure get 操作后都相反。
我想从整个代码中隐藏压缩选项,并将压缩和解压缩自包含在 MyEntity 类中。
问题
在从 azure 表获取和设置实体之前和之后是否可以进行自定义操作?有点像...
class MyEntity : TableEntity
{
public string LongString { get; set; }
public string IsCompressed { get; set; }
public override void BeforeInsert()
{
if (LongString.Length > 64KB)
{
LongString = Compress(LongString);
IsCompressed = true;
}
}
public override void AfterGet()
{
if (IsCompressed)
{
LongString = Decompress(LongString);
IsCompressed = false;
}
}
}
【问题讨论】:
-
一个小的离题评论:鉴于 Azure 使用 UTF16 对数据进行编码,因此使用 2 个字节来保存您提供的每个数据字节,限制实际上是 32KB 而不是 64KB。我想我应该提一下。
标签: c# azure azure-table-storage azure-tablequery