0

我读过你可以在处理 WCF RIA 服务时将业务规则放在服务器上,但我不知道如何完成我的工作。基本上我所拥有的是,数据库中存储了一个加密的字符串。我有一个返回该列的视图,我希望它以未加密的形式返回给客户端。我有一个标准的 DomainService Get 方法

    public IQueryable<qry_ClientList> GetQry_ClientList(Guid Key)
    {
        return this.ObjectContext.qry_ClientList.OrderBy(p => p.ClientCode);
    }

有人可以指出我在返回之前如何在该字段上调用解密函数的正确方向吗?我想在代码中而不是在服务器上执行此操作是有原因的,但我不在这里讨论。

4

2 回答 2

0

首先将您的实体具体化为列表,运行您的函数,然后在返回之前将您的列表转换回 IQueryable:

public IQueryable<qry_ClientList> GetQry_ClientList(Guid Key)
{
    List<qry_ClientList> clients = 
        this.ObjectContext.qry_ClientList.OrderBy(p => p.ClientCode).ToList();
    foreach (qry_ClientList c in clients) {
        Decrypt(c);
    }
    return clients.AsQueryable;
}
于 2013-08-04T20:51:53.857 回答
0

您可以通过覆盖 DomainService.Query() 方法进行后处理,如下所示:

public override System.Collections.IEnumerable Query(QueryDescription queryDescription, out IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> validationErrors, out int totalCount)
{
    IEnumerable result = base.Query(queryDescription, out validationErrors, out totalCount);

    // now you have collection with all client query operators applied and
    // you can apply post-processing
    if (queryDescription.Method.Name == "GetQry_ClientList")
    {
        result.OfType<qry_ClientList>().ToList().ForEach(c => Descrypt(c));
    }

    return result;
}
于 2013-08-12T11:52:10.743 回答