【问题标题】:How to Ignore properties for Db not for instance in ServiceStack.OrmLite如何忽略 Db 的属性,例如在 ServiceStack.OrmLite 中
【发布时间】:2012-07-09 23:42:22
【问题描述】:
public class Message
{
    [AutoIncrement]
    public long Id { get; set; }

    public string Text { get; set; }

    public DateTime CreateDate { get; set; }

    [References(typeof(UserAuth))]
    public int FromId { get; set; }

    [Ignore]
    public UserName FromUserName {get;set;}

 }

当我使用“忽略”属性框架时,在消息传递期间忽略该属性。我该如何编写“忽略它以获得 Db 持久性,但不要忽略它的消息传递(序列化)”。还是我必须为它写一个新的类。

【问题讨论】:

  • 作为一般规则,您不应该将您的实体用于 Db 访问以外的任何用途。如果您想将它们传递给 UI、在模型中使用它们等等...您应该创建一个几乎相同的 DTO(数据传输对象)。 AutoMapper 可以帮助将一个转换为另一个
  • 是的,我知道 DTO,但仅在一个领域看起来如此干燥(不要重复自己)杀手。实际上,该字段不是 UserName 它是 UserAuth 类。这是我尝试实施的约定。 (用于持久性的外键和用于实时使用的类)。
  • 我完全理解 - 我已经忘记了我已经开始决心避免 DTO 的项目,但我似乎总是需要它们(返回没有密码哈希/盐的用户列表,摘要信息, 等等。)。我什至尝试过基于自定义属性自动生成类。如果你确实找到了一个不错的解决方案,我很想看看。
  • 我在 BaseModel 中有所有类似的项目,并且您的模型继承了具有忽略所有属性的基本模型。您在视图模型意义上获得了额外的值,但不会影响您的 poco。我用它来为每个模型添加分页、pagenow 等,所以开箱即用,每个结果都有我一直使用的分页属性!对于其他示例,只需使用另一个基本模型,或者您也可以使用部分模型,以便您可以扩展您的模型

标签: asp.net-mvc servicestack ormlite-servicestack


【解决方案1】:

暂时没有解决办法。使用 Automapper 可以减轻负担。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2019-11-21
    • 2015-09-30
    • 2021-11-16
    相关资源
    最近更新 更多