C# 如何使用ServiceStack数据进行转换和填充?
我是一名C# 如何使用ServiceStack数据进行转换和填充?,c#,
servicestack,dto,C#,
servicestack,Dto,我是一名ServiceStack新手。我有一个相当大的.NETC#解决方案,使用CambiumORM 我正在将ServiceStackWebService项目添加到我的解决方案中。我跟着。工作正常 现在我想添加UserService:ServicereturningUserDTO,使用TranslateTo或PopulateWith像writed一样 [路由(“/user”)] [路由(“/user/{Id}”)] 公共类用户 { 公共int Id{get;set;} 公共字符串名{get;se
ServiceStack
新手。我有一个相当大的.NETC#解决方案,使用Cambium
ORM
我正在将ServiceStack
WebService项目添加到我的解决方案中。我跟着。工作正常
现在我想添加UserService:Service
returningUser
DTO,使用TranslateTo
或PopulateWith
像writed一样
[路由(“/user”)]
[路由(“/user/{Id}”)]
公共类用户
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串电子邮件{get;set;}
}
公共类UserService:Service
{
私有用户=新用户();
公共用户响应获取(用户请求)
{
返回新的UserResponse{Result=users.Single(request.Id).TranslateTo()};
}
}
但是,我无法找到这些方法
我得到的不包含“TranslateTo”的定义
我克隆了ServiceStack
存储库,但在任何扩展中都找不到这些方法的任何实现
我错过了什么?非常感谢你的帮助 对于ServiceStack v3,它是当前在中可用的稳定版本,
TranslateTo
和相关方法是ServiceStack.Common
命名空间中的扩展方法。请注意,如果您要克隆GitHub repo,v3不是master
分支。因此,使用ServiceStack.Common向文件中添加,应该足以导入扩展名方法
ServiceStack v4是GitHub中的master
分支,是一个预览版本。我认为TranslateTo扩展方法被重命名为ConvertTo
只是为了将来的我:虽然我能够编译代码,但它没有复制任何东西。这是因为Cambium
ORM返回的DynamicModel:Gemini
,没有定义(与DTO相关的)属性(请参见下文以比较这两个User
类)
例如,“数据访问层”中的myUser
类如下所示:
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
,我的DTOUser
类是:
[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; }
}
谢谢@esker,没有注意到另一个分支:-(但是我需要继续使用DynamicModel
实现,因为从数据库返回的对象是dynamic
,所以TranslateTo
(可能是通过属性进行迭代)没有任何可复制的内容。
[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; }
}