2014-10-01 2 views
4

Я пишу ниже код для извлечения всех объектов из таблицы Azure. Но я как бы застрял в деле делегирования разрешения сущностей. Я не мог найти много ссылок на MSDN.Как использовать EntityResolver с Azure Storage?

Может ли кто-нибудь указать, как использовать EntityResover в нижнем коде?

public class ATSHelper<T> where T : ITableEntity, new() 
{ 
    CloudStorageAccount storageAccount; 
    public ATSHelper(CloudStorageAccount storageAccount) 
    { 
     this.storageAccount = storageAccount; 
    } 
    public async Task<IEnumerable<T>> FetchAllEntities(string tableName) 
    { 
     List<T> allEntities = new List<T>(); 
     CloudTable table = storageAccount.CreateCloudTableClient().GetTableReference(tableName); 
     TableContinuationToken contToken = new TableContinuationToken(); 
     TableQuery query = new TableQuery(); 
     CancellationToken cancelToken = new CancellationToken();    

     do 
     { 
      var qryResp = await table.ExecuteQuerySegmentedAsync<T>(query, ???? EntityResolver ???? ,contToken, cancelToken); 
      contToken = qryResp.ContinuationToken; 
      allEntities.AddRange(qryResp.Results); 
     } 
     while (contToken != null); 
     return allEntities; 
    } 
} 

ответ

7

Here is a nice article описание стола Хранение в глубину. Он также включает в себя пару образцов для EntityResolver.

Идеально было бы иметь один универсальный резольвер, который дает желаемый результат. Затем вы можете включить его в свой звонок. Я просто приведу здесь один пример из предоставленной статьи:

EntityResolver<ShapeEntity> shapeResolver = (pk, rk, ts, props, etag) => 
{ 
    ShapeEntity resolvedEntity = null; 
    string shapeType = props["ShapeType"].StringValue; 

    if (shapeType == "Rectangle") { resolvedEntity = new RectangleEntity(); } 
    else if (shapeType == "Ellipse") { resolvedEntity = new EllipseEntity(); } 
    else if (shapeType == "Line") { resolvedEntity = new LineEntity(); }  
    // Potentially throw here if an unknown shape is detected 

    resolvedEntity.PartitionKey = pk; 
    resolvedEntity.RowKey = rk; 
    resolvedEntity.Timestamp = ts; 
    resolvedEntity.ETag = etag; 
    resolvedEntity.ReadEntity(props, null); 

    return resolvedEntity; 
}; 

    currentSegment = await drawingTable.ExecuteQuerySegmentedAsync(drawingQuery, shapeResolver, currentSegment != null ? currentSegment.ContinuationToken : null); 

Прочитайте полную статью, чтобы лучше понять сделку с разрешителями.