【问题标题】:ServiceStack AutoQuery synthetic fieldServiceStack AutoQuery 合成字段
【发布时间】:2019-03-20 01:22:04
【问题描述】:

在 Northwind 示例的 Customer DTO 中,有一个字段 Email 是合成的——即它不是来自数据库。代码在这里:https://github.com/ServiceStackApps/Northwind/blob/master/src/Northwind/Northwind.ServiceModel/Types/Customer.cs

但在运行示例中查看此字段时,此字段不可见: http://northwind.servicestack.net/query/customers

我注意到这个 DTO 有 [DataContract] 和 [DataMember] 注释,而大多数其他示例没有。

如何将合成字段添加到 AutoQuery?只需添加一个带有 pupulated getter 的方法就会给我一个错误,因为 ServiceStack 会尝试从数据库中获取它。是否应该使用“忽略”注释?或者最好的方法是将“DTO-for-database”和“DTO-for-the-service”分开,并以某种方式在它们之间使用 AutoMapper?

【问题讨论】:

    标签: servicestack servicestack-autoquery


    【解决方案1】:

    是否应该使用“忽略”注释?

    正是如此,使用[Ignore] 忽略在OrmLiteAutoQuery 中使用的字段,而[IgnoreDataMember] 是当您想忽略序列化中的属性时。

    Email 字段未显示,因为它在 [DataContract] 类中没有 [DataMember] 字段,这是 ignore fields in Serialization with ServiceStack.Text 的一种方式。

    【讨论】:

    • 只是为了确认一下:[Ignore] 适用于 SS 和数据库 (ORM) 之间,而 [IgnoreDataMember] 是在 SS 和客户端 (DTO) 之间?
    • @specimen 之间没有区别,只是 [Ignore] 被 OrmLite(AutoQuery 使用)忽略,而 [IgnoreDataMember] 被序列化程序忽略。
    • 所以我添加了这样的条目:[Ignore] public string Hello { get { return "Hello there"; } },然后 AutoQuery 失败。 SQL 现在是正确的,但是:System.InvalidOperationException: Sequence contains no matching element at System.Linq.Enumerable.First -- 我正在尝试添加一个应该返回给客户端但在 DB 中不存在的计算字段。
    • @specimen 请使用您正在使用的完整 AutoQuery DTO 打开一个新问题,并包含完整的异常 StackTrace。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多