c# - 不应用 AutoMapper 投影
问题描述
我正在尝试创建一个框架来抽象我的实体层,但是要使其工作,我需要自动映射器项目才能工作,这样我就可以查询我的 DTO 而不是查询实体
[TestMethod]
public async Task Verify_Mapping_Projection_Behavior()
{
var projectionModifier = "Alabastar";
var services = this.GetRegisteredRestEzServiceCollection();
var serviceProvider = services.BuildServiceProvider();
var context = (AstootContext)serviceProvider.GetService<DbContext>();
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDTO>().ForMember(x => x.FirstName,
o => o.MapFrom((entity, dto) => entity.FirstName + projectionModifier));
});
var mapper = config.CreateMapper();
// Hack: we'll verify exeuction happens in sql
// using the behavioral differene between in memory and sql (case insensitivity)
var sqlOnlyModifier = projectionModifier.ToUpper();
var userDTO = mapper.ProjectTo<UserDTO>(context.Users)
.Where(x => x.FirstName.Contains(sqlOnlyModifier))
.FirstOrDefault();
Assert.IsNotNull(userDTO);
}
我的测试失败了,所以我决定直接实现投影。当我具体化时,我可以看到我 projectionModifier
没有被添加到 firstName 属性中。
如何让项目映射我的修饰符,以便我可以将我的 DTO 用作 Sql Queryables?
解决方案
MapFrom 的 3 参数重载需要赋值。这可以通过使用 2 参数重载来解决。
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDTO>()
.ForMember(dto => dto.FirstName,
opt => opt.MapFrom(entity => entity.FirstName + projectionModifier));
});
推荐阅读
- html - 如何更正 CSS 样式的元素在按钮上不起作用
- python - 有没有办法在 tf.data 管道中使用 tf.keras.model.predict ?
- laravel - 使用 Laravel Validator 进行内联验证
- android - 如何获取当前在 imageview (Kotlin) 中的图像名称?
- ios - ios 的 Codemagic 自动应用签名失败
- python - Numpy:在两个真/假向量之间生成或交集
- r - 在 R 中向传单地图添加交互式时间滑块
- c++ - Qt5 tabwidget - addwidget 异常抛出读取访问冲突
- java - Spring Boot @Async:暂停执行
- gdal - 使用 GDAL 进行垂直基准转换