您可以探索的其中一個選項是使用自定義EntityProperty
解析器。
如果您更改類SomeOtherID
屬性從SomeID
的名稱並插入新的名稱表存儲實體,你將不得不在表存儲SomeID
和/或SomeOtherID
領域的實體。
當您查詢它們時,您可以提供一個自定義的EntityProperty
解析器委託,存儲器SDK將使用該委託從原始屬性字典創建具體的實體類型。在該委託中,您可以放入邏輯來處理此場景以創建所需的實際類型。
在CloudTable
重載ExecuteQuery
方法使用EntityProperty
解析:
public virtual IEnumerable<TResult> ExecuteQuery<TResult>(
TableQuery query,
EntityResolver<TResult> resolver,
TableRequestOptions requestOptions = null,
OperationContext operationContext = null
)
而且EntityProperty解析器是你決定如何從屬性字典,構建你的強類型實體的委託:
public delegate T EntityResolver<T>(
string partitionKey,
string rowKey,
DateTimeOffset timestamp,
IDictionary<string, EntityProperty> properties,
string etag
);
所以在此代理中,您將代碼用於在構造T類型返回值時使用密鑰SomeID
和SomeOtherID
處理kvp。
您也可以使用相同的方式處理類型更改。插入新模式並更改屬性類型,當您將其讀回到您的EntityProperty
解析器中處理這些模式。
我仍然建議將數據遷移到新的數據模型,而不是通過維護自定義的解析器。當您處於數據遷移過程中時,自定義解析程序可能會對您有所幫助,並且在您處於該過渡階段時仍然可以處理請求。
是否要將實體的屬性名稱從'SomeID'更改爲'SomeOtherID',並在此過程中想要更改屬性類型?請解釋。 –
@GauravMantri我試圖找到一種統一的方法來處理任何類型的架構修改。這些變化可能同時也可能不同步。 – Impworks