我的数据中有3个级别的层次结构:
DepartmentList - > EmployeeCollection - >雇员
基本上,有一些部门,每个部门都包含许多员工。
这是我的源代码:
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 property属于实体类型或指定 上的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.DataService1.HandleRequest() at System.Data.Services.DataService
1.ProcessRequestForMessage(流 messageBody)at SyncInvokeProcessRequestForMessage(对象 ,Object [],Object [])at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象 实例,对象[]输入,对象[]&amp; 输出) System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&安培; rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(布尔 isOperationContextSet)
我认为我需要在这里实现关系导航,实体数据模型本身为SQL Source实现。但我不太确定。任何指针都会非常有用。 如果您需要任何进一步的信息,请与我们联系。
感谢。
答案 0 :(得分:1)
实体类的键属性必须是属性。在您的情况下,Department.DepartmentId是一个字段。把它变成一个属性。 另一个说明。没有必要从Department.Employees返回IQueryable,只有IEnumerable才会被使用(尽管它没有受到伤害)。 您需要在Departments类上使用IQueryable属性才能使其正常工作。每个实体都必须拥有自己的顶级实体集。