タイトルが意味をなすかどうかはわかりませんが、これが私がやっていることです。AutoMapper を使用して、Entity Framework エンティティを DTO オブジェクトに、またはその逆にマップしています。問題は、DTO データを EF エンティティにマップしようとしたときに発生します。EntityKey のプロパティ間のマッピングはありません。これを修正するために、次のようなことを行います。
Mapper.CreateMap<VideoDTO, Video>()
.ForMember(dest => dest.EntityKey, opt =>
opt.ResolveUsing<VideoEntityKeyResolver>());
VideoEntityKeyResolver クラスは次のようになります。
public class VideoEntityKeyResolver : ValueResolver<VideoDTO, EntityKey>
{
protected override EntityKey ResolveCore(VideoDTO source)
{
EntityKey key = new EntityKey("EntityFrameworkTestingEntities.Videos",
"VideoId", source.VideoId);
return key;
}
}
コンストラクターでエンティティ セット名、キー プロパティ名、およびキー値を取るコンストラクターを持つ 1 つのクラスを持つことができる、これを行うためのより一般的な方法があるかどうか疑問に思っていました。
DTO オブジェクトを作成する全体的なポイントは、アプリケーションの残りのデータ層との結びつきを断ち切ることだったので、ストリームを横断するように聞こえる EntityKey プロパティを DTO オブジェクトに追加することだけを考えました。
まったく関係のないことですが (必要に応じて新しい質問を作成できます)、AutoMapper を使用する場合、どこでマッピングを定義する必要がありますか? 現在、私はコンテキスト オブジェクト (私の EF リポジトリ オブジェクト) のコンストラクターでそれを行っていますが、それはかなりコストがかかり、正しくないと思いますが、機能します。