2013-10-23 4 views
5

나는 ServiceStack 초보자입니다. 꽤 큰 .NET C# 솔루션 Cambium ORM을 사용하고 있습니다.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의 master 브랜치 인 ServiceStack v4는 미리보기 버전입니다. TranslateTo 확장 메소드가 ConvertTo으로 이름이 바뀐 것 같습니다.

+0

덕분에 @esker는 다른 브랜치를 알아 채지 못했습니다 :-(하지만 (데이터베이스를 통해 반환 된 객체가'동적 인 ') 그래서'DynamicModel' 구현을 유지해야합니다. 그래서'TranslateTo' (속성을 반복하는 것) . – davidpodhola

2

내가 미래에 나를 위해서 : 나는 코드를 컴파일 할 수 있었지만 아무 것도 복사하지 않았다. Cambium ORM이 (DTO 관련 관련) 속성이 정의되어 있지 않은 DynamicModel:Gemini을 반환하기 때문입니다 (User 클래스를 모두 비교하려면 아래 참조). 내가 다시 DynamicModel을 사용 DTO의 끝에 그래서

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 User 클래스는 다음과 같습니다 : 예를 들어

는 "데이터 액세스 레이어"내 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; } 
}