5

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

我正在将ServiceStackWebService 项目添加到我的解决方案中。我已按照指南进行操作。正常工作。

现在我想添加UserService:Service返回UserDTO 使用TranslateToPopulateWith喜欢写在这里

[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存储库,但在任何扩展中都找不到这些方法的任何实现。

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

4

2 回答 2

4

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

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

于 2013-10-23T14:10:16.993 回答
2

只是为了未来的我:虽然我能够编译代码,但它并没有复制任何东西。这是因为CambiumORM 返回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;
    }
}

所以最后我DynamicModel再次使用了 DTO,我的 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; }
}
于 2013-10-24T13:04:24.207 回答