2013-10-23 8 views
5

Ich bin ein ServiceStack Neuling. Ich habe eine ziemlich große .NET C# -Lösung mit Cambium ORM.Wie verwendet man ServiceStack DTO TranslateTo und PopulateWith?

Ich bin ServiceStack WebService-Projekt zu meiner Lösung hinzufügen. Ich habe the guide gefolgt. Richtig arbeiten.

Jetzt möchte ich UserService:Service Rückkehr User DTO mit TranslateTo oder PopulateWith wie geschrieben here hinzuzufügen.

[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>() }; 
    } 
} 

Allerdings kann ich diese Methoden nicht finden.

Ich bekomme <my_object_returned_from_database> does not contain a definition for 'TranslateTo'.

Ich habe das ServiceStack Repository geklont und ich kann keine Implementierung dieser Methoden in irgendeiner Erweiterung finden.

Was fehlt mir? Vielen dank für Deine Hilfe!

Antwort

4

Für ServiceStack v3, die derzeit verfügbare stabile Version in NuGet, TranslateTo und verwandte Methoden sind Erweiterungsmethoden im ServiceStack.Common Namespace. Beachten Sie, dass v3 nicht der master-Zweig ist, wenn Sie den GitHub-Repo klonen. Daher sollte das Hinzufügen einer using ServiceStack.Common zu Ihrer Datei ausreichen, um die Erweiterungsmethode zu importieren.

ServiceStack v4, der master Zweig in GitHub, ist eine Vorschauversion. Ich denke, die TranslateTo-Erweiterung-Methode wurde in ConvertTo umbenannt.

+0

Danke @esker, habe den anderen Zweig nicht bemerkt :-(Allerdings muss ich bei der 'DynamicModel'-Implementierung bleiben, da das von der Datenbank zurückgegebene Objekt' dynamisch 'ist, also hat 'TranslateTo' (wahrscheinlich durch Eigenschaften zu iterieren) nichts zu kopieren . – davidpodhola

2

Nur für die Zukunft ich: obwohl ich in der Lage war, den Code kompiliert zu bekommen, kopiert es nichts. Dies liegt daran, dass Cambium ORM DynamicModel:Gemini zurückgibt, für die keine (DTO-bezogenen relevanten) Eigenschaften definiert sind (siehe unten, um beide User Klassen zu vergleichen).

Zum Beispiel meine User Klasse in "Datenzugriffsschicht" sieht wie folgt aus:

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

So am Ende für DTO ich DynamicModel wieder verwendet und meine DTO User Klasse:

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