自动映射器解析使用原因"Can't resolve this to Queryable Expression"



我正在使用自动化器将域类映射到建模和Viceversa。我需要对一个属性进行加密/解密。当我将模型映射到域时,没有问题,请直接工作:

Mapper.CreateMap<EntityModel, Entity>().ForMember(dest => dest.Password, opt => opt.ResolveUsing(src => this.EncryptString(src.Password)))

但是,当映射实体建模自动应用程序崩溃并投掷时,"无法将其解析为可查询表达式":

Mapper.CreateMap<Entity, EntityModel>().ForMember(dest => dest.Password, opt => opt.ResolveUsing(src => this.DecryptString(src.Password)))

我也尝试了一个自定义值解析器,结果相同:

Mapper.CreateMap<Entity, EntityModel>().ForMember(dest => dest.Password, op => op.ResolveUsing<PasswordResolver>().FromMember(x => x.Password));

public class PasswordResolver : ValueResolver<object, string>
{
        protected override string ResolveCore(object source)
    {
        return "TEST";
    }
}

作为文档所述,您不能在可查询表达式中使用自定义解析器:

但是,您可以使用mapfrom:

Mapper.CreateMap<Entity, EntityModel>()
    .ForMember(dest => dest.Password, op => op.MapFrom(src => "TEST"));

我猜想这实际上不是您要为该密码属性做的事情,而是您可以修复示例的方法。

我认为您的问题是您要在数据库的查询中调用.NET代码,该代码是错误的。

您可以做的是在任何使用投影而不是使用.project使用.useasdatasource(configuration).fterProtovoction和.beforeProcoviention的地方。这两个都将使您能够将其投射到正确的字段中,然后在结果上进行加密/解密的结果,以便您获得所需的实际值。

通过那2个,然后拨打.for();

否则,您总是在无法执行的.NET代码的实际SQL查询上操作。

最新更新