不确定标题是否有意义,但这就是我正在做的事情。我正在使用 AutoMapper 将我的实体框架实体映射到我的 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;
}
}
我想知道是否有一种更通用的方法来执行此操作,我可以有一个带有构造函数的类,该构造函数在构造函数中获取实体集名称、键属性名称和键值。
我考虑过只为我的 DTO 对象添加一个 EntityKey 属性,这听起来很像跨越流,因为创建 DTO 对象的全部目的是在我的应用程序的其余部分中严格与我的数据层的联系。
在一个完全不相关的注释上(如果需要,我可以创建一个新问题),使用 AutoMapper 时我究竟需要在哪里定义我的映射?目前我正在我的上下文对象(这是我的 EF 存储库对象)的构造函数中执行此操作,但我认为这相当昂贵且不正确,但它确实有效。