2010-12-01 4 views
1

私はautomapperが動作するように設定しています。属性は、 とうまく動作し、正しくDTOを埋めています。私のコントローラは、私はDataAnnotationは私のEntityオブジェクトであると実装、どこでもユーザーオブジェクトを使用して経由インタフェースであるリポジトリに を渡されたユーザーオブジェクトに設定されているautomapper、Onコントローラでアクションを作成します。混乱している

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

以下のようなアクションが見えます作成します。

私がしたいことは、上記の同じコードを使用して以下のようになります。

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

質問: 私DataAnnotationは、私が検証するものを制限するUserCreateDTOになりました。 を検証したら、私はインターフェイスでUserCreateDTOを置き換えるために、すべてのコードを変更することはできません

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

    User GetUserById(Guid id); 

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

    void Save(); 
} 

以下のようなユーザーオブジェクトがインタフェースであるとして私を 許可していないメソッドを作成するuserdtoを渡すときである問題があるよりも、渡されましたリポジトリとUserEditDTO/UserShowDTOがある場合はどうなりますか? どうすればこの問題を解決できますか。私は可能な限り説明した。

答えて

1

作成を呼び出す前にユーザーオブジェクトに戻ってマップしないのはなぜですか?属性を使用する必要はありません。あなたはマップを直接呼び出すことができます。

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

マップコール後にデバッガを停止し、値が正しくコピーされたことを確認します。

+0

上記の行動方法の例を教えてください。感謝します。私はオートマッパーについている。 – Pirzada

+0

答えを更新しました。あなたが助けを必要とする場合は、再度コメントしてください – rboarman

+0

AutoMapper.Profileを継承し、Configureをオーバーライドする独自のクラスを作成することによって、アプリケーションの1か所にマップを作成する呼び出しを移動することもできます。 – CRice

関連する問題