0

我的大多数视图模型都继承自一个名为EncryptedBaseViewModel. 此方法对 ID 进行加密,因此用户看不到数据库敏感信息。

我想创建一个 AutoMapper 映射来处理映射到EncryptedBaseViewModel. 获取源 ID 值并将其传递给目标 SetId 方法。


视图模型类

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));

问题

  1. 是否可以制作通用映射器。如果是这样,我应该在AnySource指定的地方放什么?
  2. 映射是否会像任何其他特定映射一样运行?- 我想要它。

我试图避免必须为每个实体编写相同的映射,因为这可能会导致人们忘记这样做的情况。

4

1 回答 1

1

正如@DavidG 所说,您的源代码需要一个基类或接口。您也可以从对象映射,但这并不是非常有用,因为您仍然需要以某种方式访问​​源 ID。为什么是 AfterMap?这是一个黑客。您可以编写解析器内联或解析器类。关于第二点,如果您希望两个映射都运行(基础和派生),则需要 Include 。文档。_

于 2017-08-15T08:49:08.993 回答