使用现有的Poco作为ServiceStack DTO

时间:2013-03-20 11:35:06

标签: servicestack

我喜欢使用新的api i ServiceStack,并且在遗留项目中有一些Pocos,我希望保持不变。但是在我的ServiceStack项目中将它们复制到Dto是有点不合理的。我能以某种方式懒惰并“传递”属性到我的传统pocos吗?

这适用于JsonServiceClient,但是为json增加了一个额外的级别,我不喜欢这样:

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public LegacyTypeLegacyType{ get; set; }
}

public class LegacyTypeService : Service
{
    public object Post(RequestLegacyTypePost request)
    {
        return db.Insert(request.LegacyType);
    }
}

以DTO方式复制粘贴属性自然可以正常工作:

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public int Id { get; set; }
    public string SomeProp { get; set; }
    public string OtherProp { get; set; }
}

也许这种简化是最佳做法?

2 个答案:

答案 0 :(得分:2)

ServiceStack允许您将任何现有Poco重新用作请求DTO,如果您不想修改现有的旧dll,则可以使用AppHost.Configure()中的Fluent API以非侵入方式添加路径:

Routes
    .Add<LegacyTypeLegacyType>("/legacytype", "POST,OPTIONS");

答案 1 :(得分:1)

您还可以将模型继承到自定义DTO中,例如:

[Route("/legacytype", "POST,OPTIONS")]
RequestLegacyTypeDTO : LegacyType, IReturn<int> { }

这样,您就可以访问原始LegacyType模型的所有属性而无需更改。