【问题标题】:can't pass collection class as parameter to RIA Services无法将集合类作为参数传递给 RIA 服务
【发布时间】:2010-02-24 22:22:56
【问题描述】:

我在将应用程序定义的对象列表传递给 RIA 服务时遇到问题。我收到一个编译错误,提示“域操作条目 'GetPagedExams' 的错误参数 'filters' 必须是预定义的可序列化类型之一。”

这是 DomainService 中的查询:

[Query]
public IQueryable<ExamEntity> GetPagedExams(int first, int pageSize, List<FilterOptions> filters, List<string> sortDescriptions)
{
    return Context.Exams.GetPagedExams(first, pageSize, filters, sortDescriptions).Data.AsQueryable();
}

过滤器选项类定义为:

[DataContract]
[Serializable]
public class FilterOptions
{
    public enum FilterAction
    {
        Equals,
        NotEquals,
        LessThan,
        LessThanOrEquals,
        GreaterThan,
        GreaterThanOrEquals,
        Like,
        NotLike,
        IsNull,
        IsNotNull
    }

[DataMember]
[Key]
public string FieldName
{ get; set; }

[DataMember]
public FilterAction FilterOp
{ get; set; }

[DataMember]
public object FieldValue
{ get; set; }

}

添加 DataContract 和 DataMember 属性没有帮助。

我需要传递可变数量的过滤约束,这些约束将在服务器端作为 SQL 查询的一部分进行组装,因此对象列表几乎是必需的。 (是的,下面是原始 SQL,数据库可以是 SQL Server 或 Oracle。所以我不能使用 LINQ,Silverlight 客户端也不知道我使用的是哪个数据库。)

有什么建议吗?我正要尝试从客户端传递一个 XML 序列化,并在服务器上重新处理它。这真的不是我的首选……

当我为过滤器而不是集合传递单个字符串时,这是一个有效的查询。所以我知道问题出在自定义集合上。

【问题讨论】:

    标签: silverlight silverlight-3.0 wcf-ria-services


    【解决方案1】:

    这似乎是 RIA 服务的当前限制。看看MSDN forum

    编辑:刚刚在另一个项目中再次遇到此问题。一个不太好的解决方法是使用 [Invoke] 方法,该方法可以采用 List 参数并返回 IEnumerable&lt;X&gt;,但 RIA 服务不会发回 X 的导航属性。

    【讨论】:

    • 谢谢。不是我想要的答案,但却是一个答案。
    • 我完全同意(这不是很多人的答案,包括我自己),因为我也尝试过。该线程似乎暗示 MS 能够消除限制。
    • 有没有取消限制的消息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多