我的大多数视图模型都继承自名为EncryptedBaseViewModel
的基本视图模型。此方法加密ID,以便用户看不到数据库敏感信息。
我想创建一个AutoMapper映射,处理映射到EncryptedBaseViewModel
的任何实体之间的所有映射。获取源ID值并将其传递到目标SetId方法。
ViewModel类
class EncryptedBaseViewModel
{
private string _encryptedId;
public int Id {get; set; } // to be after new mapping method is developed.
public void SetId(int id)
{
_encryptedId = Encrypted(id);
}
public string GetId()
{
return _encryptedId;
}
}
自动映射器示例
我有伪造攻击了这个例子,它在映射后传递了值,因为不确定该方法。 欢迎提出建议。
CreateMap<AnySource, EncryptedBaseViewModel>().ForMember(vm => nameof(vm.Id), opt => opt.Ignore()).AfterMap((src,dest) => dest.SetId(src.Id));
问题
AnySource
的地方放什么?我试图避免为每个实体编写相同的映射,因为这可能导致忘记执行该操作的情况。
答案 0 :(得分:1)
正如@DavidG所说,你需要一个基类或接口来源。您也可以从对象映射,但这不是非常有用,因为您仍然需要以某种方式访问源ID。为什么AfterMap?这是一个黑客攻击。您可以编写一个内联解析器或解析器类。 关于你的第二点,如果你想要两个映射运行(base和derived),你需要Include。 docs。