【发布时间】: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