2016-04-13 4 views
0

In einer Anwendung habe ich derzeit nur eine URI, die auf eine bestimmte Sammlung verweist. Auf dieser Sammlung habe ich einen gespeicherten Proc geschrieben. Der Prozess funktioniert, keine Probleme, aber ich muss es aus einer .NET-Anwendung heraus ausführen.Wie führe ich eine gespeicherte Prozedur aus, ausgehend von der URI einer bestimmten Sammlung

habe ich einige graben und fand den folgenden Ansatz:

public DataOverview GeneralOverviewByClient(int clientId, DateTime? fromDate = null, DateTime? toDate = null) 
    { 
     DataOverview result = null; 

     // Get a Database by querying for it by id 
     Database db = _documentDbClient.CreateDatabaseQuery().Where(d => d.Id == "XXXX") 
                  .AsEnumerable() 
                  .Single(); 

     // Use that Database's SelfLink to query for a DocumentCollection by id 
     DocumentCollection collection = _documentDbClient.CreateDocumentCollectionQuery(db.SelfLink).Where(c => c.Id == "YYYY") 
                            .AsEnumerable() 
                            .Single(); 

     StoredProcedure storedProcedure = _documentDbClient.CreateStoredProcedureQuery(new Uri(collection.StoredProceduresLink)).Where(p => p.Id == "spGetData") 
                                   .AsEnumerable() 
                                   .FirstOrDefault(); 

     if (storedProcedure != null) 
     { 
      var response = _documentDbClient.ExecuteStoredProcedureAsync<DataOverview >(storedProcedure.SelfLink, clientId, fromDate, toDate); 
      result = response.Result; 
     } 

     return result; 
    } 

aber es funktioniert nicht, da meine URI zu der Sammlung weist bereits die Aussage Database db = _documentDbClient.CreateDatabaseQuery().Where(d => d.Id == "XXXX") ausfällt.

Ich fuhr fort zu graben und fand eine Überlastung in dem ich den Namen der gespeicherten proc passieren könnte (zumindest das ist, wie es schien mir), so dass ich den Code neu zu schreiben:

var response = _documentDbClient.ExecuteStoredProcedureAsync<DataOverview>("spGetData", clientId, fromDate, toDate); 
if (response != null) { result = response.Response; } 

Aber ich bekomme immer noch keine Ergebnisse. Was vermisse ich/mache ich falsch?

Antwort

0

Ich würde die Verwendung der UriFactory über _self Links empfehlen (um zusätzliche Netzwerk-Round-Trips zu vermeiden), um den Verweis auf die gespeicherte Prozedur zu erstellen.

Versuchen Sie folgendes:

var response = _documentDbClient.ExecuteStoredProcedureAsync<DataOverview>(UriFactory.CreateStoredProcedureUri("XXXX", "YYYY", "spGetData")).Result 
Verwandte Themen