[c#] Ria Services将复杂对象作为参数传递给查询域服务方法


0 Answers

超级老问题,我知道。 但是我刚刚得到了这个,找到了答案。 从ComplexObject上的MSDN文档:

但是一个ComplexObject与一个实体在重要方面有所不同。 特别是复杂的类型不具有身份。 这意味着他们没有用KeyAttribute标记的成员,因此客户端不能像对实体一样进行身份缓存。 复杂类型不能从多个父实例共享或引用,并且不支持继承。

Question

WCF RIA服务遇到了一些类似于此主题中指定的问题。

我创建的domainservice方法(一个Query方法)应该带有一个复杂的对象参数。 示例domainservice方法:

public ComplexObjectResult GetComplexObject(ComplexObjectParameter test)
   {
        //do stuff
   }

参数对象:

public class ComplexObjectParameter 
{        

    [Key]
    public decimal ID { get; set; }

    ... other fields
}

我得到这个编译错误: 错误70域操作入口“GetComplexObject”的参数'test'必须是预定义的可序列化类型之一

在网上搜索一些后,我发现这个MSDN线程 。 它声明这是RIA服务的一个限制,并且这个线程没有规定好的解决方法。

现在似乎有一些肮脏的解决方法:

  • 更改复杂的参数为字符串和序列化/反序列化我们自己的参数对象,我觉得很hacky的解决方案。

  • 在域服务方法上使用[Invoke]标签,并放弃所有RIA跟踪功能,为此我首先使用RIA。

上述解决方案是否有替代方案,缺点较少? 有人发现这个问题更加优雅的解决方法吗?

谢谢




Related