2016-06-26 12 views
1

In DynamoDB, wenn Limit Eigenschaft wurde eingerichtet, DynamoDB eine „letzte ausgewertet Taste“ zurück, die für die Paginierung verwendet wird (siehe here)ServiceStack.Aws unterstützt "zuletzt ausgewerteten Schlüssel" auf DynamoDB?

Ich möchte wissen, ob ServiceStack.Aws diese Funktion unterstützen (für .NET C# -Version), oder wenn ich brauche, direkt dem AWSSDK Client

Dank

EDIT verwenden: ich eine Server-Seite Paginierung implementieren möchten. Wie kann man dies erreichen PocoDynamo? Mein Code wie dieser

public IList<Company> GetCompanies(string shortName, ref string lastKeyEvaluated) 
{ 
    IList<Company> data = null; 
    using (AmazonDynamoDBClient awsDynamoDbClient = new AmazonDynamoDBClient()) 
    { 
     IPocoDynamo dbDynamo = new PocoDynamo(awsDynamoDbClient); 
     var queryExpression = dbDynamo.FromQuery<Company>(c => c.ShortName == shortName); 
     data = dbDynamo.Query(queryExpression, 10); //How can i pass lastEvaluatedKey? 
     var awsdkClient = dbDynamo.DynamoDb; //Can i get last evaluated key from original AWSDK client? 
    } 
    return data; 
} 

EDIT 2 sieht: In einigen Antworten, sagten sie mir, dass ich brauche einen Delegaten Parameter zu verwenden. Es scheint jedoch, dass dieser Delegat ein QueryResponse-Objekt erwartet und ein IEnumerable zurückgibt. Von QueryResponse weiß ich, dass ich LastEvaluatedKey erhalten kann, aber wie dieser Delegat den letzten ausgewerteten Schlüssel zurückgeben kann? Es ist möglich zu tun?

Dank

Dank

Antwort

1

In PocoDynamo, wenn Sie die Query or Scan API's verwenden, die eine IEnumerable<T> zurückkehren, das heißt:

public interface IPocoDynamo 
{ 
    //... 
    IEnumerable<T> ScanAll<T>(); 
    IEnumerable<T> Scan<T>(ScanRequest request, Func<ScanResponse, IEnumerable<T>> fn); 
    IEnumerable<T> Scan<T>(ScanExpression<T> request); 
    IEnumerable<T> Query<T>(QueryExpression<T> request); 
    IEnumerable<T> Query<T>(QueryRequest request); 
    IEnumerable<T> Query<T>(QueryRequest request, Func<QueryResponse, IEnumerable<T>> fn); 
} 

PocoDynamo einen faulen Sequenz zurückgibt, die transparent mehrere ausgelagerten Anfragen sendet so viele holen Ergebnisse wie benötigt mit der LastEvaluatedKey Antwort, um die nächste Seite der Ergebnisse zu holen.

Für API, die eine Grenze und zurück ein konkretes List<T> die Ergebnisse noch LastEvaluatedKey die Ergebnisse zu holen verwenden akzeptieren, aber sie sind stattdessen eifrig geholt in eine konkrete List<T> vor zurückgegeben werden.

+0

Ich möchte eine serverseitige Paginierung implementieren. Ich kann in PocoDynamo keine Methode finden, die einen zuletzt ausgewerteten Schlüssel akzeptiert. Auf der anderen Seite kann keine Methode gefunden werden, die den zuletzt ausgewerteten Schlüssel abrufen kann. Wäre super eine Überladungsmethode, die den zuletzt ausgewerteten Schlüssel akzeptiert, und eine Möglichkeit, diesen Wert ebenfalls abzurufen. –

+0

@VladimirVenegas PocoDynamo APIs sind verwaltete Abfragen, die sich um die Paginierung hinter den Kulissen kümmern. Aber die Scan und Query Expressions erbt von ScanRequest/QueryRequest, die 'ExclusiveStartKey' enthält, wo der LastEvaluatedKey gesetzt werden kann. Wenn Sie Ihre eigene Paginierung übernehmen und bearbeiten möchten, können Sie auf den AWS-zugrunde liegenden 'db.DynamoDb'-Client und auf [eigene Paginierung] zugreifen (https://github.com/ServiceStack/ServiceStack.Aws/blob/1083a58932869be13b2679ef9bef36e7ed1b1bfb/tests /ServiceStack.Aws.DynamoDbTests/UseCases/DynamoDbTodoExample.cs#L202). – mythz

+0

@VladimirVenegas Die Abfrage-/Abfrage-APIs, die einen 'Func <,>' Callback akzeptieren, ermöglichen Ihnen den Zugriff auf die Antwort, die den' LastEvaluatedKey' enthält. Das Hinzufügen zusätzlicher APIs, die LastEvaluatedKey akzeptieren, wäre verwirrend. Sie würden nicht wissen, wie das Verhalten der API aussehen würde. – mythz