带注释的忽略字段在服务堆栈响应中被忽略

Annotated Ignore field get's ignored in servicestack reponse

我有这样的请求:

 ARequest : QueryBase<Person, Result>, IJoin<Person, OtherThing>

人有以下字段

[Ignore]
Public string Label { get { return FirstName + LastName; }

在我的结果中我有以下内容

public int Id; 
public string Label

但是,如果我向字段添加 Ignore 属性,它会被忽略。因此,每当我执行所有操作时,唯一 returned 是一个 id 列表,并且在 QueryResponse 中 Label 总是空的,但是如果我 return 一个 Person 而不是 Result 我得到了一个完整的回复。

所以问题是,我如何确保 OrmLite 不在数据库中搜索标签,而是在我的自定义 return 对象中设置标签。

不确定我是否理解你想要做什么,但如果你只是想 return Label 你应该可以将它添加到 return编辑 DTO,例如:

public class Result
{
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string Label { get { return FirstName + LastName } }
}

在 mythz 向我解释了如果它不映射到您的 ormlite 数据库,它以后就不会映射到您生成的 DTO 的事实之后,我建立了一个快速的解决方法。而不是在以下行中立即返回我自己的响应 dto:

ARequest : QueryBase<Person, Result>, IJoin<Person, OtherThing>

我刚刚返回了人物对象:

 ARequest : QueryBase<Person>, IJoin<Person, OtherThing>

然后在我的服务中,我按照以下几行编写了一个简单的映射器:

   QueryResponse<Result> response = result.ConvertTo<QueryResponse<Result>>();
    response.Results = new List<Result>();

    foreach (Person p in result.Results)
     {

       response.Results.Add(new Result{ Id = p.EmployeeId, Label = (p.FirstName + " " + p.LastName) });
     }
   return response

通过这种方式,我确保标签中填满了名字和姓氏,但不必重新设计我的结果 DTO,因此我可以使其非常通用。