【问题标题】:How to use ServiceStack DTO TranslateTo and PopulateWith?如何使用 ServiceStack DTO TranslateTo 和 PopulateWith?
【发布时间】:2013-10-23 13:39:41
【问题描述】:

我是ServiceStack 新手。我有一个使用 Cambium ORM 的大型 .NET C# 解决方案。

我正在将ServiceStack WebService 项目添加到我的解决方案中。我关注了the guide。工作正常。

现在我想使用TranslateToPopulateWith 添加UserService:Service 返回User DTO,就像写的here

[Route("/user")]
[Route("/user/{Id}")]
public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}


public class UserService : Service
{
    private Users users = new Users();

    public UserResponse Get(User request)
    {
        return new UserResponse { Result = users.Single(request.Id).TranslateTo<User>() };
    }
}

但是我找不到这些方法。

我收到&lt;my_object_returned_from_database&gt; does not contain a definition for 'TranslateTo'

我确实克隆了 ServiceStack 存储库,但在任何扩展中都找不到这些方法的任何实现。

我错过了什么?非常感谢您的帮助!

【问题讨论】:

    标签: c# servicestack dto


    【解决方案1】:

    对于ServiceStack v3,这是NuGet中当前可用的稳定版本,TranslateTo和相关方法是ServiceStack.Common命名空间中的扩展方法。请注意,如果您正在克隆 GitHub 存储库,则 v3 不是 master 分支。因此,在文件中添加using ServiceStack.Common 应该足以导入扩展方法。

    ServiceStack v4 是 GitHub 中的 master 分支,是一个预览版。我认为 TranslateTo 扩展方法已重命名为 ConvertTo

    【讨论】:

    • 谢谢@esker,没有注意到另一个分支:-( 但是我需要继续使用DynamicModel 实现,因为从数据库返回的对象是dynamic 所以TranslateTo(可能遍历属性)没有什么可复制的。
    【解决方案2】:

    只是为了未来的我:虽然我能够编译代码,但它并没有复制任何东西。这是因为Cambium ORM 返回DynamicModel:Gemini,它没有定义(与DTO 相关的)属性(见下文比较User 类)。

    例如,我在“数据访问层”中的User 类如下所示:

    public class User : DynamicModel, IUser
    {
        public User() : base() { }
    
        public User(object dto)
            : base(dto)
        {
        }
    
        public Guid InternalId { get; set; }
        public DateTime Created { get; set; }
        public bool IsBlocked { get; set; }
    
        public static implicit operator idata.User(User u)
        {
            idata.User result = new idata.User();
            u.CopyProperties(result);
            return result;
        }
    }
    

    所以最后对于 DTO,我再次使用了 DynamicModel,而我的 DTO User 类是:

    [Route("/user")]
    [Route("/user/{Id}")]
    public class User : DynamicModel
    {
        public User(object dto)
            : base(dto)
        {
        }
    
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 2015-11-02
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多