2013-10-23 7 views
5

Jestem nowicjuszem ServiceStack. Mam dość duże rozwiązanie .NET C#, korzystając z ORM Cambium.Jak korzystać z ServiceStack DTO TranslateTo i PopulateWith?

Dodaję do projektu projekt ServiceStack WebService. Śledziłem the guide. Działa poprawnie.

Teraz chcę dodać UserService:Service powrocie User Dto użyciu TranslateTo lub PopulateWith jak pisemnej 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>() }; 
    } 
} 

Jednak nie jestem w stanie zlokalizować tych metod.

Otrzymuję <my_object_returned_from_database> does not contain a definition for 'TranslateTo'.

Sklonowałem repozytorium ServiceStack i nie mogę znaleźć żadnej implementacji tych metod w żadnym rozszerzeniu.

Czego mi brakuje? Bardzo dziękuję za Twoją pomoc!

Odpowiedz

4

Dla ServiceStack v3, która jest stabilną wersją dostępną obecnie w NuGet, TranslateTo, a pokrewnymi metodami są metody rozszerzeń w przestrzeni nazw ServiceStack.Common. Zauważ, że jeśli klonujesz repozytorium GitHub, v3 nie jest gałęzią master. Dlatego dodanie do pliku pliku using ServiceStack.Common powinno wystarczyć do zaimportowania metody rozszerzenia.

ServiceStack v4, gałąź master w GitHub, to wersja demonstracyjna. Myślę, że metoda rozszerzenia TranslateTo zmieniła nazwę na ConvertTo.

+0

Dzięki @esker, nie zauważyłem drugiego oddziału :-(Jednak będę musiał pozostać przy implementacji 'DynamicModel', ponieważ obiekt zwrócony z bazy danych jest' dynamiczny' więc 'TranslateTo' (prawdopodobnie iterujący poprzez właściwości) nie ma nic do skopiowania . – davidpodhola

2

Tylko dla przyszłości mnie: chociaż udało mi się skompilować kod, nie kopiuje on niczego. Dzieje się tak, ponieważ ORM zwraca Cambium w postaci DynamicModel:Gemini, która nie ma zdefiniowanych (powiązanych z DTO) właściwości (zobacz poniżej, aby porównać obydwie klasy: User).

Na przykład moja User klasa w "warstwie dostępu do danych" wygląda następująco:

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; 
    } 
} 

Więc w końcu dla DTO użyłem DynamicModel ponownie i moja DTO User klasa:

[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; } 
} 
Powiązane problemy