Meine gespeicherten Prozedur: (Ich habe es über Azure Script Explorer)Documentdb fehlgeschlagen gespeicherte Prozedur Antwort auf deserialisieren oder wandeln sie in meinem definierten Typ
function GetAllResources() {
var collection = getContext().getCollection();
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT * FROM MultiLanguage as m',
function (err, docs, options) {
if (err) throw err;
// Check the feed and if empty, set the body to 'no docs found',
// else take 1st element from feed
if (!docs || !docs.length) getContext().getResponse().setBody('no docs found');
else getContext().getResponse().setBody(JSON.stringify(docs));
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
Die sproc erfolgreich aus Skript-Explorer ausgeführt werden.
Mein C# -Code die sproc nennen:
public async Task<IHttpActionResult> GetReources() {
client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["endpoint"]), ConfigurationManager.AppSettings["authKey"]);
var collectionLink = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
//var docs = await client.ReadDocumentFeedAsync(collectionLink, new FeedOptions { MaxItemCount = 10 });
//var docs = from d in client.CreateDocumentQuery<Models.Resource>(collectionLink)
// select d;
StoredProcedure storedProcedure = client.CreateStoredProcedureQuery(collectionLink).Where(c => c.Id == "GetAllResources").AsEnumerable().FirstOrDefault();
Models.Resource docs = await client.ExecuteStoredProcedureAsync<Models.Resource>(storedProcedure.SelfLink);
foreach (var d in docs) {
Models.Resource a = new Models.Resource();
a = docs;
//a.id = d.id;
//a.Scenario = d.Scenario;
//a.Translations = d.Translations;
//a.LastModified = d.LastModified;
//a.ModifiedBy = d.ModifiedBy;
//a.LastAccessed = d.LastAccessed;
resources.Add(a);
}
return Ok(resources);
}
Erstens gibt es einen Fehler für die "foreach ..." wie sagte
foreach nicht auf Variablen vom Typ Model arbeiten kann. Ressource, weil keine öffentliche Definition von GetEnumerator enthält.
Dann habe ich versucht, meine sproc zu ändern, um nur 1 Ergebnis zurückzukehren und die foreach Linie entfernen, dann Fehler, sagte
Ich habeFehler beim Deserialisieren gespeicherte Prozedur Antwort oder wandeln sie ‚Modelle zu geben. Ressource '
Ich möchte nur das Ergebnis der gespeicherten Prozedur als meine definierte Klasse (Models.Resource) zurückgeben. Wie macht man das?
Nicht, dass es "der" Fehler ist, aber in Ihrer 'foreach' versuchen Sie,' a' zu 'docs' statt' d' zuzuweisen. –
Sorry, das ist ein Tippfehler wenn ich kopiere ... Es sollte a = d sein; –