-
Notifications
You must be signed in to change notification settings - Fork 0
MS_AutoMapper
- 戻る(ASP.NET MVCの利用方法(
MS_ASPNETMVCUsage.md))- AutoMapper
- ADO.NET vs ORM (Entity Framework, Dapper)
AutoMapper について。
- .NET Standard 対応もされている。
- 評価後の感想は、少々微妙だった(ので自作した)。
補足(用途): AutoMapper は
**オブジェクト間の詰め替え(Object-Object Mapping)**を規約ベースで自動化する
ライブラリで、DB アクセスそのものを行うものではない。典型的な用途は、
- エンティティ(Entity Framework)→ DTO / ViewModel
- 入力モデル → ドメイン モデル
といった層をまたぐ変換である。
データアクセスのカテゴリに置かれているのは、
IDataReaderからのマッピング(後述)を扱っているためである。
-
基本機能でオブジェクト間の copy を処理する。
-
以下のような機能が提供されている。
- メンバ名でマッピング
- 異なるメンバ名のマッピング
- 異なる型のマッピング
- マッピング対象から外す
- 相互マッピング
- マッピングのプロファイルを使用する。
-
参考
- 【C#】AutoMapper の CreateMap が使えない!? - tekitoumemo's diary
http://tekitoumemo.hatenablog.com/entry/2018/01/17/231927 - .net - Is Mapper.Map in AutoMapper thread-safe? - Stack Overflow
https://stackoverflow.com/questions/10649250/is-mapper-map-in-automapper-thread-safe
- 【C#】AutoMapper の CreateMap が使えない!? - tekitoumemo's diary
補足(最新化:静的
Mapperは廃止): 参考リンクにある
「CreateMapが使えない」は、AutoMapper 4.2 以降で
静的 API(Mapper.CreateMap/Mapper.Initialize)が非推奨・削除されたことによる。
現在はインスタンス API(MapperConfiguration/IMapper)を使う。// Profile に定義をまとめる public class BlogProfile : Profile { public BlogProfile() { CreateMap<Blog, BlogDto>() .ForMember(d => d.AuthorName, o => o.MapFrom(s => s.Author.Name)); } } // ASP.NET Core:DI に登録(AutoMapper.Extensions.Microsoft.DependencyInjection) builder.Services.AddAutoMapper(typeof(BlogProfile).Assembly); // 利用側 public class BlogService(IMapper mapper) { /* mapper.Map<BlogDto>(blog) */ }スレッド安全性については、
MapperConfiguration/IMapperはスレッド セーフで、
シングルトンとして共有してよい(構成の生成はコストが高いので使い回す)。
補足(ライセンスの変更): AutoMapper は
2025 年に商用ライセンスへ移行した(作者の発表による)。
一定規模以下の利用は無償枠があるものの、
新規採用時はライセンス条件の確認が必須である。
元ページの「自作した」という判断は、結果的にこの変更の影響を受けない。代替としては、
- 手書きのマッピング メソッド(最も確実。生成 AI や IDE の支援で負担も小さい)
- Mapperly(ソース ジェネレータ。実行時リフレクションが無く高速)
- Mapster
などが挙げられる。
オブジェクト・コレクションからオブジェクト・コレクションへのマッピング。
AutoMapper.Data は、色々と調べてみたが上手く動かない。
したほうが良さそう。
※ 汎用ライブラリの割に★や DL 数が少ない。
補足:
IDataReaderから POCO への詰め替えが目的なら、
それ専門である Dapperを使うのが素直である。
AutoMapper は本来「オブジェクト同士の変換」のためのライブラリであり、
データ リーダからのマッピングは主戦場ではない。
Entity Framework 6 用の拡張の AutoMapper.EF6 というものがある。
※ 汎用ライブラリの割に★や DL 数が少ない(AutoMapper.Data よりは多い)。
補足(射影は
ProjectToを使う): EF と組み合わせる場合、
エンティティを全件取得してからMapするのではなく、
ProjectTo<TDto>()を使うとSELECT句が DTO の列だけに絞られる。var dtos = await context.Blogs .Where(b => b.IsPublic) .ProjectTo<BlogDto>(mapper.ConfigurationProvider) .ToListAsync();不要な列や関連の読み込みを避けられるため、性能差が大きい。
ASP.NET Core の DI 用の拡張。
-
AutoMapper
https://automapper.org -
AutoMapper/AutoMapper: A convention-based object-object mapper in .NET.
https://github.com/AutoMapper/AutoMapper -
ASP.NET Core で AutoMapper を使う - ryuichi111std の技術日記
http://ryuichi111std.hatenablog.com/entry/2016/11/18/005238 -
【C#】AutoMapper の CreateMap が使えない!? - tekitoumemo's diary
http://tekitoumemo.hatenablog.com/entry/2018/01/17/231927
- AutoMapper
https://www.nuget.org/packages/AutoMapper/ - AutoMapper.Data
https://www.nuget.org/packages/AutoMapper.Data/ - AutoMapper.EF6
https://www.nuget.org/packages/AutoMapper.EF6/
- AutoMapper を使ってオブジェクト間のデータコピーを自動化するには?
-
AutoMapper を使ってオブジェクトを詰め替える - きよくらの備忘録
http://kiyokura.hateblo.jp/entry/2014/09/17/093000 -
AutoMapper の基本的な使い方メモ - いろいろ備忘録日記
https://devlights.hatenablog.com/entry/2015/03/11/081130 -
AutoMapper を使用したオブジェクトのマッピング - 開発備忘録
http://iyemon018.hatenablog.com/entry/2015/09/26/185822
- c# - Using AutoMapper with Data Reader
https://stackoverflow.com/questions/25681102/using-automapper-with-data-reader - c# - Using AutoMapper to Map a DataTable to an Object (DTO)
https://stackoverflow.com/questions/35414228/using-automapper-to-map-a-datatable-to-an-object-dto
Tags: 移行, データアクセス, .NET開発, ADO.NET
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。