-2

http://msdn.microsoft.com/en-us/library/dd728281.aspx#Y0でコード例を確認したところ、興味深いことが 1 つ見つかりました。OrderItemData クラスから Public ReadOnly Property Items() を削除すると、サービスは次のように表示されます。エラー。Items にアクセスしようとせず、Orders のみを操作する場合でも。このプロパティが必要な理由を誰かが説明できますか?

編集: 明確にするために: プロパティは直接使用されません。コードから削除し、正常にコンパイルされますが、サービスは次の要求エラーを返します。「サーバーで要求の処理中にエラーが発生しました。詳細については、サーバー ログを参照してください。」また、例外はスローされません。

何らかの理由でサービスに IQueryable(Of Item) プロパティが必要になる可能性があると思います。プロパティが Nothing を返した場合でも、サービスは再び機能し始めます。

Public ReadOnly Property Items() As IQueryable(Of Item) 
    Get 
        Return Nothing 
    End Get 
End Property
4

1 に答える 1

2

WCF Data Service がリフレクション プロバイダーを使用する場合 (これはサンプルが行うことです)、各エンティティ タイプは次の条件を満たす必要があります。

  • いくつかのパブリック プロパティを持つパブリック クラスである必要があります。
  • キー プロパティを定義する必要があります (規則または DataServiceKey 属性を使用)。
  • T がコンテキスト クラスのエンティティ型である IQueryable 型のパブリック プロパティが必要です。

Items プロパティを削除すると、上記のルール番号 3 に違反します。そのため、タイプ Item はもはやエンティティ タイプとして認識されませんが (内部的に複合タイプとして扱われます)、コレクションのアイテム タイプとして Order クラスで使用されます。つまり、ナビゲーション プロパティである必要がありますが、アイテム タイプがエンティティである必要があります。

ある種の封じ込め (Item が属する Order からのみ Item にアクセスできる) を探している場合、現在の WCF DS はこれをまだサポートしていません。

于 2012-04-10T12:20:49.203 に答える