Навигация отношений в службе данных WCF с пользовательским (объектным) источником данных - PullRequest
1 голос
/ 07 апреля 2011

В моих данных 3 уровня иерархии:
DepartmentList -> EmployeeCollection -> Employee

В основном, есть несколько отделов, в каждом из которых есть несколько сотрудников.

Вот мой исходный код:

public class DataService : DataService<Departments>


public class Departments
    {
        private List<Department> _deptCollection;

        public IQueryable<Department> DeptCollection { get { return this._deptCollection.AsQueryable(); } }

...
...
    }

[DataServiceKey("DepartmentId")]
public class Department
{
    public string DepartmentId { get; set; }

    private IList<EmployeeBase> _employees { get; set; }

    public IQueryable<EmployeeBase> Employees
    {
        get { return _employees.AsQueryable(); }
    }

    ...
}


[DataServiceKey("Id")]
public class EmployeeBase
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Когда я пытаюсь просмотреть DataService, я получаю следующую ошибку:

Сервер обнаружил ошибку обработка запроса. Исключение сообщение «О типе контекста данных «Отделы», есть топ IQueryable свойство 'DeptCollection' чей тип элемента не является сущностью тип. Убедитесь, что IQueryable свойство типа объекта или указать атрибут IgnoreProperties на тип контекста данных, чтобы игнорировать это имущество.'. Смотрите журналы сервера для более подробности. Трассировка стека исключений:

в System.Data.Services.Providers.ReflectionServiceProvider.PopulateMetadata (IDictionary 2 knownTypes, IDictionary 2 childTypes, IDictionary 2 entitySets) at System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata() at System.Data.Services.DataService 1.CreateProvider () в System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService 1.ProcessRequestForMessage (Stream messageBody) в SyncInvokeProcessRequestForMessage (Объект , Object [], Object []) в 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) в 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.ProcessMessage2 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet)

Я думаю, что мне нужно реализовать здесь навигацию по отношениям, которую модель данных сущностей делает сама для источника SQL. Но я не слишком уверен. Любые указатели были бы очень полезны. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

1 Ответ

1 голос
/ 07 апреля 2011

Ключевое свойство класса сущностей должно быть свойством.В вашем случае Department.DepartmentId - это поле.Преврати это в собственность.Еще одно примечание.Нет необходимости возвращать IQueryable из Отдела. Работники, в любом случае будет использоваться только IEnumerable (хотя это не повредит).Для этого вам понадобится свойство IQueryable в вашем классе Departments.Каждый объект должен иметь свой собственный набор объектов верхнего уровня.

...