我有一个自定义域服务,其中包含一个返回用户对象列表的 [Invoke] 操作。
为了让它编译,我必须在 [Invoke] 操作之外的属性(下面突出显示为“DONOTUSE”)或方法中找出 User 对象,否则我会遇到以下编译时错误:
名为“GetUsers”的操作不符合所需的签名。返回类型必须是实体或复杂类型、实体或复杂类型的集合或预定义的可序列化类型之一。
一旦我找出了属性,它就会按预期编译和执行,但是黑客让我很恼火。
我不想使用[Query] 属性,所以请不要建议我这样做。我这样说是因为如果我确实切换到 [Query] 它编译得很好,但是,我不想处理 EntityQuery 结果集或其延迟执行。
由于我设计架构的方式、本例中用例的需求以及 MSDN 文档,[Invoke] 是最合适的方式。
[EnableClientAccess()]
public class UserDomainService : DomainService
{
private IUserService userService;
public UserDomainService(IUserService service)
{
userService = service;
}
[Invoke, RequiresAuthentication]
public List<User> GetUsers()
{
return userService.GetUsers();
}
//HOW CAN I REMOVE THE FOLLOWING AND STILL COMPILE?
public User DONOTUSE()
{
return null;
}
}
我会把这个留给你的......我有另一个项目,它具有带有单个 [Invoke] 操作的自定义 DomainServices,它编译得很好。对于我的一生,我无法弄清楚为什么一个会编译另一个。
更新
请参阅下面所选答案中的评论。