我是ServiceStack
新手。我有一个使用Cambium
ORM的非常大的.NET C#解决方案。
我正在将ServiceStack
WebService项目添加到我的解决方案中。我跟着the guide。工作正常。
现在我想添加UserService:Service
使用User
返回TranslateTo
DTO或PopulateWith
写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>() };
}
}
但是我无法找到这些方法。
我收到<my_object_returned_from_database> does not contain a definition for 'TranslateTo'
。
我确实克隆了ServiceStack
存储库,但在任何扩展中都找不到这些方法的任何实现。
我错过了什么?非常感谢你的帮助!
答案 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; }
}