3

Subsonic で WCF Data Service を使用しようとしていますが、「service.svc」にアクセスしようとするとこのエラーが発生します。2 つのプロジェクトがあります。1 つは、テーブルのクラスを生成する Subsonic t4 テンプレートを含むクラス ライブラリ (「OData」と呼ばれます) です。もう 1 つは、「OData」プロジェクトを参照する ASP.NET MVC2 プロジェクトです。

次に、ASP.NET MVC プロジェクト内に "service.svc" という名前の新しい WCF データ サービス項目を作成します。これは、"OData" プロジェクトから取得した Subsonic によって生成された "TestDB" コンテキストを指します。この記事に従って、「サービス」クラスにこの属性を追加しました。 .net-data-services.aspx

これは私のサービスクラスがどのように見えるかです:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class Service : DataService<SymetraGivingDB>
{
   // This method is called only once to initialize service-wide policies.
   public static void InitializeService(DataServiceConfiguration config)
   {
      // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
      // Examples:
      // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
      // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
      config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
      config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead);
      config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
   }
}

http://localhost/Service.svcにアクセスしようとすると、次のエラーが表示されます。

リクエストエラー

サーバーでリクエストの処理中にエラーが発生しました。
例外メッセージは、「データ コンテキスト タイプ 'SymetraGivingDB' で、要素タイプがエンティティ タイプではない最上位の IQueryable プロパティ 'Users' があります。
IQueryable プロパティがエンティティ タイプであることを確認するか、データ コンテキスト タイプで IgnoreProperties 属性を指定して、このプロパティを無視してください。詳細については、サーバー ログを参照してください。例外スタック トレースは次のとおりです。

System.Data.Services.Providers.ReflectionServiceProvider.PopulateMetadata (IDictionary 2 knownTypes, IDictionary2 childTypes、IDictionary 1.CreateProvider () で System.Data.Services.DataService 1.ProcessRequestForMessage (ストリーム messageBody) で SyncInvokeProcessRequestForMessage (オブジェクト、オブジェクト []、オブジェクト [] ) System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(オブジェクト インスタンス、Object[] 入力、Object[]& 出力) で System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc& rpc) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc& rpc) で2 entitySets)
at System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata()
at System.Data.Services.DataService

1.HandleRequest()
at System.Data.Services.DataService






System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) の.ProcessMessage2(MessageRpc& rpc)
System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1
(MessageRpc& rpc)
の System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

このエラーは、基本的に Id / Name / Deleted の 3 つの列を持つ「Users」テーブルについて言及しています。テーブル間に何らかの関係があり、すべてのテーブルに主キー ID として「Id」があります。

なぜこのエラーが発生するのか分かりますか?

どうもありがとうございました。

4

1 に答える 1

1

エンティティ クラスに [IgnoreProperties("Columns")] 属性を追加して、WCF Data Service ランタイムから Columns プロパティを非表示にできるはずです。それ以外の場合、ランタイムは、T がエンティティ型ではない IList 型のプロパティをサポートしていません。

于 2010-09-16T12:04:55.163 に答える