2016-04-15 15 views
5

私は以下のストアドプロシージャを持っていて、idでオブジェクトを見つけるだけです。.netからDocumentDbストアドプロシージャを呼び出す

function sample(id) { 
    var context = getContext(); 
    var response = context.getResponse(); 
    var collection = context.getCollection(); 

    var findObject = "SELECT * FROM Objects o where o.userId='" + id +"'"; 

    // Query documents and take 1st item. 
    var isAccepted = collection.queryDocuments(
     collection.getSelfLink(), 
     findObject, 

     function (err, feed, 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 (!feed || !feed.length) throw new Error("Object not found"); 
      else response.setBody(feed[0]); 
     }); 

    if (!isAccepted) throw new Error('The query was not accepted by the server.'); 
} 

そして、これは私の主な機能文献

public class UserPoints: Document 
{ 
    [JsonProperty("userId")] 
    public Guid UserId; 

    [JsonProperty("remainingPoints")] 
    public int RemainingPoints; 
} 

を拡張し、私のC#クラスで、私は上記のストアドプロシージャを呼び出すと、それはUserPointsは、ユーザーID用のオブジェクトを返すことを期待しています。

例:

UserPoints points = new UserPoints() 
{ 
    UserId = Guid.NewGuid(), 
    RemainingPoints = 1000 
}; 

await client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collection), points); 
points.Dump(); 

var response = await client.ExecuteStoredProcedureAsync<UserPoints>(UriFactory.CreateStoredProcedureUri(databaseName, collection, storedProcedureName), points.UserId.ToString()); 
response.Response.Dump(); 

私は、次の例外を取得私は、ストアドプロシージャ

を実行したときに「UserPoints」を入力するタイプ「Microsoft.Azure.Documents.Document」のオブジェクトをキャストすることができませんDocument基本クラスの拡張をやめても問題ありませんが、更新に必要なSelfLinkプロパティにアクセスすることはできません。私は何か間違っているのですか? ExecuteStoredProcedureAsyncが強い型を取る場合、それを型キャストしてその型のオブジェクトを返すべきではないでしょうか?

+1

psです。 DocumentDBの操作にセルフリンクは必要ありません。参照しようとしているリソースのIDだけを使用できるようになりました。たとえば、ReplaceDocumentAsync(UriFactory.CreateDocumentUri( "my database id"、 "my collection id"、 "my doc id")、updated_doc_object)です。詳細はhttps://azure.microsoft.com/en-us/blog/azure-documentdb-bids-fond-farewell-to-self-links/を参照してください。 –

答えて

0

これはDocumentDB .NET SDKのバグです。私たちは修正を調査中です。

修正がリリースされるまでの回避策として、DocumentDBにドキュメントを保存するためにDocumentから派生する必要はありません。 Idのような内部プロパティにアクセスする必要がある場合は、それらのプロパティをオブジェクトに追加することができます。 as

[JsonProperty("id")] public string Id {get; set;}