【发布时间】:2025-12-17 23:35:02
【问题描述】:
在我只能读取的远程数据库中,一天中的每个小时连续有 24 列。它们的名字分别为 P1、P2、...、P24。
我必须将值复制到我自己的数据库中,我将其命名为 H1、H2、...、H24。
如何使用自动映射器将远程列映射到本地?
CreateMap<Data.Context.SomeTableFromRemoteDb, Data.Entity.MyTableInLocaldb>()
.ForMember(x => x.H1, y => y.MapFrom(z => z.P1))
.ForMember(x => x.H2, y => y.MapFrom(z => z.P2))
.ForMember(x => x.H3, y => y.MapFrom(z => z.P3))
.ForMember(x => x.H4, y => y.MapFrom(z => z.P4))
.ForMember(x => x.H5, y => y.MapFrom(z => z.P5))
.ForMember(x => x.H6, y => y.MapFrom(z => z.P6))
.ForMember(x => x.H7, y => y.MapFrom(z => z.P7))
.ForMember(x => x.H8, y => y.MapFrom(z => z.P8))
.ForMember(x => x.H9, y => y.MapFrom(z => z.P9))
.ForMember(x => x.H10, y => y.MapFrom(z => z.P10))
.ForMember(x => x.H11, y => y.MapFrom(z => z.P11))
.ForMember(x => x.H12, y => y.MapFrom(z => z.P12))
.ForMember(x => x.H13, y => y.MapFrom(z => z.P13))
.ForMember(x => x.H14, y => y.MapFrom(z => z.P14))
.ForMember(x => x.H15, y => y.MapFrom(z => z.P15))
.ForMember(x => x.H16, y => y.MapFrom(z => z.P16))
.ForMember(x => x.H17, y => y.MapFrom(z => z.P17))
.ForMember(x => x.H18, y => y.MapFrom(z => z.P18))
.ForMember(x => x.H19, y => y.MapFrom(z => z.P19))
.ForMember(x => x.H20, y => y.MapFrom(z => z.P20))
.ForMember(x => x.H21, y => y.MapFrom(z => z.P21))
.ForMember(x => x.H22, y => y.MapFrom(z => z.P22))
.ForMember(x => x.H23, y => y.MapFrom(z => z.P23))
.ForMember(x => x.H24, y => y.MapFrom(z => z.P24));
这是当前代码。我要问的是我们能不能把它转换成这样的:
CreateMap<Data.Context.SomeTableFromRemoteDb, Data.Entity.MyTableInLocaldb>()
.ForMember(x => x.ReplaceMemberName(o=> o, "H", "P"), y => y.MapFrom(z => z.P1))
Automapper 有一个名为 replacemembername 的函数,但它似乎不是我想要的。
【问题讨论】:
-
“相似”太主观了。您会看到重复出现的模式,但计算机却没有。从它的角度来看,名称中一半的数据在 P2 和 H2 之间发生了变化。 “地毯”和“木偶”也有一半相似;但正因为如此,它们之间没有自动连接。除非名称相同,否则您需要手动映射属性。
-
目前有代码吗?如何从数据库中获取数据并保存?
-
@sasha_gud 获取和保存过程无关。重要的是如何使用自动映射器映射它们。
-
@Flater,顺便说一句,如果不是自动映射器,它可以通过反射或动态来完成。
-
@Doruk:并不是说不能使用反射来完成,但我希望您看到这是一个非常自定义的案例,具有非常自定义的逻辑。一个广泛适用的库通常不会处理这些事情,因为它提供了通用(尽管理想情况下是可扩展的——这是您所需要的)功能。名称中带有索引的属性,例如 P1,P2,... 应该(在正确的代码中)由数组处理,而不是手动编写的属性列表。那么只需将P数组映射到H数组即可。
标签: c# automapper automapper-5