2013-10-23 6 views
5

私はServiceStack初心者です。私はCambium ORMを使用して、かなり大きな.NET C#ソリューションを持っています。ServiceStack DTOのTranslateToとPopulateWithの使用方法は?

私はServiceStack WebServiceプロジェクトを私のソリューションに追加しています。私はthe guideに従った。正しく働く。

は今、私は書かれてhereようTranslateToまたはPopulateWithを使用してUser DTOを返すUserService:Serviceを追加します。

[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

NuGetで現在利用可能な安定版であるServiceStack v3では、TranslateToと関連するメソッドはServiceStack.Common名前空間の拡張メソッドです。 GitHubリポジトリを複製する場合、v3はmasterブランチではありません。したがって、ファイルにusing ServiceStack.Commonを追加すると、拡張メソッドをインポートするのに十分なはずです。

GitHubのServiceStack v4は、masterブランチであり、プレビュー版です。私はTranslateTo拡張メソッドがConvertToに改名されたと思います。

+0

ありがとう@eskerは、他のブランチに気付かなかった:-(しかし、 'DynamicModel'実装では、データベースから返されたオブジェクトが' dynamic'なので、 'TranslateTo'(おそらくプロパティを通して反復)はコピーするものがないので。 – davidpodhola

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; } 
} 
関連する問題