【发布时间】:2020-04-30 00:35:36
【问题描述】:
我正在尝试创建一个框架来抽象我的实体层,但是为了使其工作,我需要自动映射器项目才能工作,这样我就可以查询我的 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?
【问题讨论】:
-
@LucianBargaoanu,我已经阅读了文档,我的项目根本没有被应用,不仅仅是在 sql 中,它们甚至不会出现在内存中。
-
没错,就是这样。在 SQL 中它可能会崩溃和运行时,但那是其他的。
-
@LucianBargaoanu,如果 SQL 在运行时崩溃不应该不返回数据,当我调用列出时它仍然可以正常实现
-
您当然可以找到一些工作示例,并准确找出您做错了什么。例如github.com/AutoMapper/AutoMapper/tree/master/src/….
标签: c# .net-core automapper projection