最後の章では、クラスを作成することにより、autoMapperプロファイルクラスを継承しました
パブリック クラスマッピング:プロファイル { パブリックマッピング() { CreateMap <UserDto、TbUser> (); } }
その時の転送対象ロットで欠陥があるやって、手動でも1とも比較的トラブル、それを維持するとの間のマッピングを設定する必要があります。
パッケージAutoMapper
作成AutoMapperExtension拡張クラス
/// <まとめ> /// AutoMapperにより拡張 /// </要約> パブリック 静的 クラスAutoMapperExtension { /// <まとめ> /// ターゲット・オブジェクトにソースオブジェクトをマップする /// </要約> /// <typeparam名= "T"> エンティティタイプ</ typeParam> /// <PARAM NAME = "OBJ"> ソースオブジェクト</ PARAM> /// <戻り値> エンティティ変換後</戻り> パブリック 静的 T MapTo < T>( この オブジェクトOBJ) { 場合(OBJ == nullの)スロー 新しいです例外(" 例外" ); VARの設定= 新しい新しい MapperConfiguration(CTX => ctx.CreateMap(obj.GetType()、typeof演算(T))); VARマッパー= config.CreateMapper(); 戻り mapper.Map <T> (OBJ); } /// <まとめ> /// ターゲット・オブジェクトにソースオブジェクトをマップする /// </要約> /// <typeParam名= "T"> エンティティタイプ</ typeParam> /// <PARAM名= "DTO"> ソースオブジェクト</ param>の /// <PARAM NAME = "エンティティ">観客</ param>の /// <リターン> 转化之后的实体</戻り> パブリック 静的 T地図<T>(オブジェクトDTO、Tエンティティ) { VARの設定= 新しい MapperConfiguration(CTX => ctx.CreateMap(dto.GetType()、typeof演算(T)) ); VARマッパー= config.CreateMapper()。 VAR newModel = mapper.Map(DTO、エンティティ); 返すnewModelを。 } }
ビジネス層を変更
/// <要約> /// 添加用户 /// </要約> /// ます。<param name = "DTO"> 实体传输对象</ param>の /// <リターン> </リターン> 公共 intが追加( UserDto DTO) { // VAR情報= _mapper.Map <UserDto、TbUser>(DTO)。 VAR情報= dto.MapTo <TbUser> (); info.AddTime = DateTime.Now; info.UserId = Guid.NewGuid()ToStringメソッド(" N " )。 // VARユーザー=新しいTbUser // { // 。= Guid.NewGuidユーザーID()のToString( "N")、 // メール= dto.Emailにおいて、 // ユーザー名= dto.UserName、 // でaddTime DateTime.Now = // }; _dbContext.Add(情報); リターン_dbContext.SaveChanges(); } /// <まとめ> /// 編集ユーザ情報 /// </要約> /// <PARAM NAME = "DTO"> 物理的送信対象</ PARAM> /// <戻り値> </戻り値> 公共 int型の更新(UserDTO DTO) { VARのユーザー=_dbContext.TbUsers.Find(dto.UserId); IF(ユーザー== nullの)スロー 新しい新しい例外(" ユーザー情報の取得に失敗しました" ); // user.username = dto.UserName; // user.email = dto.Email。 AutoMapperExtension.Map(DTO、ユーザ); 戻り_dbContext.SaveChanges(); }
テストを実行
同じ効果があらかじめパッケージ