2017-08-02 5 views
3

DocumentDB属性を使用してCosmos DBに接続するAzure関数があります。私はVisual Studio 2017ツールのAzure関数を使用しています。私は唯一の1例は、これを行う見てきましたAzure関数のDocumentDB属性でSqlQueryを送信

[FunctionName("DocumentDbGet")] 
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage req, TraceWriter log, 
     [DocumentDB("FunctionJunctionDemo", "Demo", SqlQuery = $"select * from c where c.Id = {Id}")]IEnumerable<DemoModel> items) 
    { 
     //Can perform operations on the "items" variable, which will be the result of the table/collection you specify 
     string name = req.GetQueryNameValuePairs() 
      .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) 
      .Value; 

     var item = items.Where(x => x.FirstName == name); 
     return req.CreateResponse(HttpStatusCode.OK); 
    } 

と:ここでは簡単な関数は、私はそうのようなDocumentDB属性のパラメータの1つとしてSqlQueryを渡すことができるようにしたい

[FunctionName("DocumentDbGet")] 
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage req, TraceWriter log, 
     [DocumentDB("FunctionJunctionDemo", "Demo")]IEnumerable<DemoModel> items) 
    { 
     //Can perform operations on the "items" variable, which will be the result of the table/collection you specify 
     string name = req.GetQueryNameValuePairs() 
      .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) 
      .Value; 

     var item = items.Where(x => x.FirstName == name); 
     return req.CreateResponse(HttpStatusCode.OK); 
    } 

ですそれはおそらく働いていたと報告した。 https://github.com/Azure/Azure-Functions/issues/271 「エラー」は、可能なパラメータとしてSqlQueryという名前のものは認識されません。

Azure関数の入力バインディングのドキュメントを参照しました https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-documentdb#input-sample-with-multiple-documentssqlQuery属性を含むfunction.jsonファイルの出力を示しています。それがどうしてそこに入りましたか?

DocumentDB属性でSqlQueryを渡すことができない場合は、結果全体をフィルタリングしてコレクション全体を返し、LINQクエリを実行しないようにするのがベストプラクティスですか?

答えて

5

1.1.0-betaバージョンMicrosoft.Azure.WebJobs.Extensions.DocumentDB NuGetパッケージ(またはそれ以降)を参照する必要があります。

このバージョンでは、SqlQueryは有効なパラメータのDocumentDBです。私はselect文字列の前に$記号を削除する場合のコードは、私のためにコンパイル:

[DocumentDB("FunctionJunctionDemo", "Demo", SqlQuery = "select * from c where c.Id = {Id}")] 

あなたは$を必要としない - それは、C#で文字列補間のためにあなたがここで何をしたいではない何かを使用しています。

+0

こんにちは@Mikhail - 迅速な応答ありがとう!だから、最初から必要ではなかった '$'を削除しても、それをまだ有効であると認識していません。たぶん私はバージョンの不一致がありますか?私はMicrosoft.Azure.WebJobs.Extensions.DocumentDBのv1.0.0を使用しています。これは 'DocumentDB'属性がどこに来るかです。 Azure CLIのアップデートが必要なのでしょうか? –

+0

私はAzure関数のCLIを最新のバージョンにアップデートしました。私のVisual Studio 2017プレビューからプレビュー7まで、Visual StudioのAzure関数ツールを0.2から0.3.30802にアップデートすることができました。これのどれも助けられませんでした。私のマシン上で 'SqlQuery'の下に素晴らしい赤い塊が残っています。たぶん私はパッケージを完全に欠いているのでしょうか? –

+1

@EricFleming 'Extensions.DocumentDB'パッケージの' 1.1.0-beta1'バージョンを参照しています。違いがありますか? – Mikhail

関連する問題