2013-10-23 17 views
5

Sono un novellino ServiceStack. Ho una soluzione .NET C# abbastanza grande che utilizza Cambium ORM.Come utilizzare ServiceStack DTO TranslateTo e PopulateWith?

Sto aggiungendo il progetto WebService ServiceStack alla mia soluzione. Ho seguito the guide. Funzionando correttamente

Ora voglio aggiungere UserService:Service ritorno User DTO utilizzando TranslateTo o PopulateWith, come scritto 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>() }; 
    } 
} 

Tuttavia io sono in grado di individuare questi metodi.

Mi sto ottenendo <my_object_returned_from_database> does not contain a definition for 'TranslateTo'.

Ho clonato il repository ServiceStack e non riesco a trovare alcuna implementazione di questi metodi in alcuna estensione.

Cosa mi manca? Grazie mille per il vostro aiuto!

risposta

4

Per ServiceStack v3, che è la versione stabile attualmente disponibile in NuGet, TranslateTo e metodi correlati sono metodi di estensione nello spazio dei nomi ServiceStack.Common. Si noti che se si sta clonando il repository GitHub, v3 non è il ramo master. Quindi aggiungere un file using ServiceStack.Common al file dovrebbe essere sufficiente per importare il metodo di estensione.

ServiceStack v4, il ramo master in GitHub, è una versione di anteprima. Penso che il metodo di estensione TranslateTo sia stato rinominato in ConvertTo.

+0

Grazie @esker, non ho notato l'altro ramo :-(Tuttavia dovrò rimanere con l'implementazione 'DynamicModel' dato che l'oggetto restituito dal database è' dynamic' quindi 'TranslateTo' (probabilmente iterando attraverso le proprietà) non ha nulla da copiare . – davidpodhola

2

Solo per il futuro: sebbene sia stato in grado di ottenere il codice compilato, non è in grado di copiare nulla. È perché Cambium ORM restituisce DynamicModel:Gemini, che non ha le proprietà (rilevanti relative al DTO) definite (vedere di seguito per confrontare entrambe le classi User).

Per esempio la mia classe User in "strato di accesso ai dati" si presenta così:

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

Così alla fine per DTO ho usato DynamicModel di nuovo e la mia classe 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; } 
}