如何使用ServiceStack DTO TranslateTo和PopulateWith?

时间:2013-10-23 13:39:41

标签: c# servicestack dto

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

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

现在我想添加UserService:Service使用User返回TranslateTo DTO或PopulateWithhere

[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>() };
    }
}

但是我无法找到这些方法。

我收到<my_object_returned_from_database> does not contain a definition for 'TranslateTo'

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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; }
}