OData (Служба данных WCF) с Subsonic 3 - PullRequest
3 голосов
/ 04 сентября 2010

Я пытаюсь использовать WCF Data Service с Subsonic, но столкнулся с этой ошибкой, когда я пытаюсь получить доступ к моей "service.svc".У меня есть 2 проекта, один - это библиотека классов (называемая «OData»), в которой есть шаблоны Subsonic t4 для генерации классов для моей таблицы.Другим проектом является ASP.NET MVC2, который ссылается на проект «OData».

Затем я создаю новый элемент службы данных WCF внутри моего проекта ASP.NET MVC, который называется «service.svc», и указывает на мойКонтекст «TestDB», сгенерированный Subsonic, который я получил из проекта «OData».Я добавил этот атрибут в свой класс «service» для этой статьи: http://theruntime.com/blogs/jaykimble/archive/2008/11/18/quotsubsonicquot-for-services-found-subsonic-3--ado.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, IDictionary 2 childTypes, IDictionary 2 entitySets)<br> at System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata()<br> at System.Data.Services.DataService 1.CreateProvider ()
в System.Data.Services.DataService 1.HandleRequest()<br> at System.Data.Services.DataService 1.ProcessRequestForMessage (Stream messageBody)
в SyncInvokeProcessRequestForMessage (Object, Object [], Object [])
в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (вход объекта, объект []]Объект [] и выходные данные)
в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & rcherl.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.PisserService.Rec.Rec.DRatchSPRecTimeSystemRec.PlayStimeTimeRatchSMRec_SignServer_Rec_Rec_Server_Rec_Server_Rec_Server_Rec_Server_Rec_Server_SignS_S_S_W_R_P_D_P_D_P_D_P_D_P_S_S_S,ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.Prolis_Service.Rec.Rec.RecPlayStimeRecPlayServer_ImpService.ImpRackServer.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc)
в System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet)

Ошибка упоминает о моей таблице «Пользователи», которая в основном имеет 3 столбца:Id / Name / Deleted, между таблицами есть некоторая взаимосвязь, и у всей моей таблицы в качестве идентификатора первичного ключа есть «Id».

Есть идеи, почему я получаю эту ошибку?

Спасибовам очень нравится.

1 Ответ

1 голос
/ 16 сентября 2010

Вы должны иметь возможность добавить атрибут [IgnoreProperties ("Columns")] в свой класс сущности, который будет скрывать свойства Columns из среды выполнения WCF Data Service.В противном случае среда выполнения не поддерживает свойства типа IList, где T не является типом сущности.

...