2010-12-01 3 views
1

Ich habe alles für AutoMapper zu arbeiten. Attribut funktioniert gut als gut und richtig DTO füllen. Meine Controller-Aktion erstellen sieht aus wie untenAuto-Manager, Ein Aktion auf dem Controller erstellen. Verwirrt

[HttpPost] 
[AutoMap(typeof(User), typeof(UserCreateDTO))] 
public ActionResult Create(User user) 
{ 
    if (ModelState.IsValid) 
    { 
     _repository.Create(user); 
     return RedirectToAction("Details", new { id = user.UserId }); 
    } 

    return View("Edit", user); 
} 

Ich habe DataAnnotation auf User-Objekt gesetzt, den Gegenstand meiner Entity ist und weitergegeben Repository, das Interface über die Implementierung und Verwendung von Benutzerobjekt überall.

Was ich tun möchte, ist wie unten unter Verwendung derselben oben genannten Code.

[HttpPost] 
[AutoMap(typeof(User), typeof(UserCreateDTO))] 
public ActionResult Create(UserCreateDTO userdto) 
{ 
    if (ModelState.IsValid) 
    { 
     _repository.Create(userdto); 

      return RedirectToAction("Details", new { id = userdto.UserId }); 
    } 

    return View("Edit", userdto); 
} 

Frage: Meine DataAnnotation sind jetzt auf UserCreateDTO zu begrenzen, was ich überprüfen möchten. Sobald die Validierung bestanden als es ein Problem ist, das ist, wenn ich userdto passieren Methode zu erstellen, die mich nicht als Benutzerobjekt ermöglicht, wie in der Schnittstelle unter

public interface IUserRepository 
{ 
    IQueryable<User> GetAllUsers(); 

    User GetUserById(Guid id); 

    void Create(User user); 
    User Edit(User user); 
    void Delete(User user); 

    void Save(); 
} 

ich den gesamten Code nicht ändern können UserCreateDTO in Schnittstelle zu ersetzen und Repository und Was passiert, wenn ich UserEditDTO/UserShowDTO habe. Wie löse ich dieses Problem ?. Ich habe so viel wie möglich erklärt.

Antwort

1

Warum werden Sie nicht vor dem Aufruf von Create einem Benutzerobjekt zugeordnet? Sie müssen die Attribute nicht verwenden. Sie können Map direkt aufrufen.

Mapper.CreateMap<UserCreateDTO, User>(); 
var user = new user(); 
Mapper.Map<UserCreateDTO, User>(userdto, user); 

den Debugger Stellen nach der Karte Anruf zu stoppen und überprüfen Sie die Werte, um sicherzustellen, korrekt kopiert wurden.

+0

Geben Sie mir ein Beispiel bitte in meiner oben genannten Aktionsmethode. Wird dankbar sein. Ich bin kein Autofahrer. – Pirzada

+0

Ich habe meine Antwort aktualisiert. Kommentar erneut, wenn Sie Hilfe benötigen. – rboarman

+0

Sie können den Aufruf auch verschieben, um eine Zuordnung zu einer Stelle in der Anwendung zu erstellen, indem Sie eine eigene Klasse erstellen, die AutoMapper.Profile erbt und Configure überschreibt. – CRice

Verwandte Themen