OData (WCF Data Service) 経由で Azure Table Storage を使用して "Person" エンティティにアクセスしています。これを機能させるには多くの問題がありました。私はこのエラーを抱えていました:
エンティティ コード:
public class Person : TableServiceEntity
{
public string Name { get; set; }
... etc
URI: http://127.0.0.1/DataService/PersonDataService.svc/Person
結果:
サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、「データ コンテキスト タイプ 'PersonDataServiceContext' で、要素タイプがエンティティ タイプではない最上位の IQueryable プロパティ 'Person' があります。IQueryable プロパティがエンティティ タイプであることを確認するか、データ コンテキスト タイプで IgnoreProperties 属性を指定して、このプロパティを無視してください。
多くのトラブルシューティングの後、この投稿を通じて、このエラーを回避するためにエンティティに追加できることがわかりました。
1) カスタム キーを追加するための [DataServiceKey] 属性 ([DataServiceKey("PartitionKey", "RowKey")] が必要です)
2)「PersonID」プロパティを探すことによって(これは私のために働く唯一のものです)
3) 「ID」プロパティを探すことによって
いいえ 1 は、私のために働く唯一のものです。次のように、「PersonID」列を追加する必要がありました。
エンティティ コード:
public class Person : TableServiceEntity
{
public Guid PersonID { get; set; } //This is absolutely necessary to get around the aforementioned error
public string Name { get; set; }
... etc
http://127.0.0.1/DataService/PersonDataService.svc/Personを介して、または PersonID: http://127.0.0.1/DataService/PersonDataService.svc/Person(guid'e4a924d1-a564-45d7- 9e3e-fe0396d08f8e')
PartitionKey/RowKey (TableServiceEntity から取得) などのカスタム主キー列を指定したいのですが、このコードを使用しても役に立ちません。
[DataServiceKey("PartitionKey", "RowKey")]
public class Person : TableServiceEntity
{
public string Name { get; set; }
... etc
これはバグですか?私が持っているすべてのエンティティについて、その規則に従う必要がありますか? Person => PersonID、Foo => FooID など。
Visual Studio 2012 と Silverlight 5、.NET Framework 4.0 を使用しています。