Как создать Службу данных WCF на базовом типе - PullRequest
1 голос
/ 03 апреля 2011

Я пытаюсь сделать что-то вроде этого:

public class DataService : DataService<EmployeeCollection>
{
  public IQueryable<EmployeeBase> GetEmployeeData(string EmpIdSubstring)
  {
    var employees = new List<EmployeeBase>();
    employees.Add(new Level1Employee());
    employees.Add(new Level2Employee());
    return employees.AsQueryable();
  }
}

Здесь:

  1. Level1Employee и Level2Employee классы являются производными от EmployeeBase class.
  2. EmployeeBase определение класса украшено [DataServiceKey("Id")].
  3. EmployeeCollection содержит IEnumerable<EmployeeBase>.

Но когда я просматриваю эту службу в браузере, я получаю следующую ошибку:

Внутренняя ошибка сервера. Тип 'Level1Employee' не является сложным типом или типом сущности.

Я попытался переместить атрибут [DataServiceKey] из класса EmployeeBase в определения классов Level1Employee и Level2Employee. Но получаю ту же ошибку.

Обратите внимание, что служба работает нормально, если я возвращаю коллекцию сотрудников, содержащую элементы типа EmployeeBase.

Возможно ли этого добиться? Любая помощь / указатели / идеи очень ценятся.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

Контекстный класс (EmployeeCollection в вашем случае) должен предоставлять открытое свойство с использованием метода get и типа IQueryable, а класс EmployeeBase должен иметь атрибут DataServiceKey, чтобы EmployeeBase (и все его производные типы) распознавался как объекттипы.Вам также необходимо добавить атрибут [WebGet] в ваш метод, чтобы он распознавался как операция службы.

0 голосов
/ 03 апреля 2011

Это своего рода выстрел в темноте, основанный на поведении DomainServices из служб RIA.

Попробуйте добавить функцию для каждого подкласса.По одному для возврата IQueryable<Level1Employee> и IQueryable<Level2Employee>.

...