2017-09-05 10 views
0

Azure Table Storageを入力バインディングとして使用し、複数のエンティティを取得しようとするAzure関数を作成するとMicrosoft.Azure.WebJobs.Host.Tables.TableExtension + TableToIQueryableConverter`1 [TElement] 'がタイプ' TElement 'の制約に違反しています

Error: 
Function ($ScheduleTrigger) Error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.myTimerTrigger'. Microsoft.Azure.WebJobs.Host: GenericArguments[0], 'Submission#0+Task', on Microsoft.Azure.WebJobs.Host.Tables.TableExtension+TableToIQueryableConverter`1[  TElement]' violates the constraint of type 'TElement'. mscorlib: GenericArguments[0], 'Submission#0+Task', on 'Microsoft.Azure.WebJobs.Host.Tables.TableExtension+TableToIQueryableConverter`1 [TElement]' violates the constraint of type parameter 'TElement'.  
Session Id: f4a00564b4864fb3a131557dd45924c7  

Timestamp: 2017-09-05T07:48:09.738Z 

私は、この場合には、次のようにC#のタイマートリガーがあるために使用コード:

using System; 

public class Task 
{ 
    public string PartitionKey { get; set; } 
    public string RowKey { get; set; } 
    public DateTime Timestamp { get; set; } 
    public string Name { get; set; } 
} 

public static async Task Run(TimerInfo myTimer, IQueryable<Task> inputTable, TraceWriter log) 
{ 
    foreach (var task in inputTable) { 
     log.Info($"Processing task '{task.Name}' at: {DateTime.Now}"); 
    } 
    log.Info($"Timer trigger executed at: {DateTime.Now}"); 
} 

答えて

3

私は答えを見つけたの代わりに、私は次のエラーを取得するだけで、単一のenntityの上記の自分自身に、しかしエラーメッセージが私にすぐに答えを得なかったので、私はfigurエド私は投稿し、自分自身の質問に答えるだろう。

using System; 

public class MyInput : TableEntity 
{ 
    public string Name { get; set; } 
} 

public static async Task Run(TimerInfo myTimer, IQueryable<MyInput> inputTable, TraceWriter log) 
{ 
    foreach (var item in inputTable) { 
     log.Info($"Processing item '{item.Name}' at: {DateTime.Now}"); 
    } 
    log.Info($"Timer trigger executed at: {DateTime.Now}"); 
} 
+0

おそらく 'IQueryable TEntity:TableEntity'のようなものがコード内にあります。エンティティタイプが制約を満たしていないため、エラーメッセージが表示されます。 – juunas

+0

TableEntityクラスに「タスク」という名前を付けることを意味しましたか?これは組み込みのSystem.Threading.Taskと競合します。 –

+1

@ mike-sという名前の付け方は貧弱でした。実際のコードでは名前が変更されています。いい意味で、誰も誤ってコピーしないようにここでも変更します。 –

1

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-tableは、単にエラーを修正すれば、以下の通りに上記のコードサンプルを変更:私は私のエンティティのために使用されたモデルは、EntityTableから派生していないため、ここで説明したよう

エラーが発生しています

IQueryable < T>バインディングの場合、TはTableEntityでなければなりません。 IQueryableへのバインディングは、他のバインディングプロパティ(パーティションキー、行キー、フィルタ、テイク)を無視することに注意してください。

ただし、ここではforeachを使用しているため、より簡単なバインディングを行うことができます。 T [](Tに制約がない)に直接バインドする作業項目があります。 https://github.com/Azure/azure-webjobs-sdk/issues/972。あなたのケースで役立つなら、それをUpvoteに自由に感じてください。

関連する問題