如何在基本类型上创建WCF数据服务

时间:2011-04-03 08:43:58

标签: c# wcf exception-handling wcf-data-services odata

我正在尝试做这样的事情:

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. Level1EmployeeLevel2Employee类派生自EmployeeBase class。
  2. EmployeeBase类定义以[DataServiceKey("Id")]
  3. 修饰
  4. EmployeeCollection包含IEnumerable<EmployeeBase>
  5. 但是当我在浏览器中浏览此服务时,出现以下错误:

      

    内部服务器错误。 “Level1Employee”类型不是复杂类型或实体类型。

    我尝试将[DataServiceKey]类从EmployeeBase类移到Level1EmployeeLevel2Employee类定义。但得到同样的错误。

    请注意,如果我返回包含EmployeeBase类型元素的雇员集合,则该服务可以正常工作。

    有可能实现这一目标吗?非常感谢任何帮助/指针/见解。

2 个答案:

答案 0 :(得分:0)

这是基于来自RIA服务的DomainServices的行为而在黑暗中拍摄的。

尝试为每个子类添加一个函数。每个返回IQueryable<Level1Employee>IQueryable<Level2Employee>.

答案 1 :(得分:0)

上下文类(在您的情况下为EmployeeCollection)必须使用getter和IQueryable类型公开公共属性,并且EmployeeBase类必须具有DataServiceKey属性,以便将EmployeeBase(及其所有派生类型)识别为实体类型。 您还需要在方法上添加[WebGet]属性,以便将其识别为服务操作。