automapper - 自动映射到多个子类型
问题描述
对于要映射到使用 Automapper 的结果,我进行了一些间接操作。在下面的示例中,LabDetailsIntermediate
结果包含两个 EF Core 模型。然后我想将它们映射到另一个结构中,但我无法让投影正常工作。
为了CovidRoomDetailsDTO
记录,MaxPhase2
属性应该来自Covid
元素,然后Phase
属性应该来自Phase
模型。
如果我不使用自动映射器,我基本上会这样做:
from r in Lab.AsNoTracking()
from p in CovidSitePhase.Where(x => x.SiteId == 60)
join c in LabSpaceSafeDistance on r.TririgaId equals c.TririgaId
select new RoomDetailsDTO {
Covid = new CovidRoomDetailsDTO {
MaxPhase2 = c.MaxPeople,
Phase = p.Phase
}
};
这是我的类型和当前代码的内容。这显然是一个更大的查询的一部分,我刚刚把它分解成一个我无法工作的部分。
async Task Main() {
var query = from r in Lab.AsNoTracking()
from p in CovidSitePhase.Where(x => x.SiteId == 60)
join c in LabSpaceSafeDistance on r.TririgaId equals c.TririgaId
select new LabDetailsIntermediate {
Covid = c,
Phase = p
};
var mapper = CreateMapper();
var data = await query
.ProjectTo<RoomDetailsDTO>(mapper.ConfigurationProvider)
.FirstOrDefaultAsync();
JsonSerializer.Serialize(data, data.GetType(), new JsonSerializerOptions {
WriteIndented = true,
IgnoreNullValues = true
}).Dump();
}
IMapper CreateMapper() {
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<LabDetailsIntermediate, RoomDetailsDTO>()
.IncludeMembers(x => x.Covid);
cfg.CreateMap<LabSpaceSafeDistance, RoomDetailsDTO>();
cfg.CreateMap<LabSpaceSafeDistance, CovidRoomDetailsDTO>();
});
return config.CreateMapper();
}
public sealed record RoomDetailsDTO {
public CovidRoomDetailsDTO Covid { get; init; }
}
public sealed record CovidRoomDetailsDTO {
public int MaxPhase2 { get; set; }
public int Phase { get; init; }
}
public sealed class LabDetailsIntermediate {
public LabSpaceSafeDistance Covid { get; set; }
public CovidSitePhase Phase { get; init; }
}
解决方案
推荐阅读
- c# - 通过 OpenXML 在 Excel 中设置行高
- php - 在 1 个查询中从 2 个表中选择行
- gcc - crtatmega328p.o:(.init9+0x0): undefined reference to "main"
- javascript - How can I load a text separately using my modal box?
- excel - Copy from worksheet to worksheet when worksheets names are the same
- elasticsearch - elasticsearch 比索引(索引)更老
- angular - 蓝牙串行写入在 Ionic - v4 中不起作用
- php - 从 PHP 获取 MySQL 字符串时不相等的二进制字符比较
- c++ - 如何解决 *** `./key_server' 中的错误:free():invalid pointer: 0x00007f361a97b6e8 in c++
- c# - C# IntelliSense 在 Visual Studio Community 2017 和 Unity 中不起作用