Automapper错误:不支持从方法映射表达式



当尝试映射两个对象时,什么可能导致错误"表达式映射从方法尚不支持" ?我找不到任何地方提到这个错误。

编辑,

我有更多的信息。我有一个属性在我的DTO声明为:

 public LookupItem RegionType { get; set; }

然而,当我调用映射时,它会生成错误,"从方法映射的表达式尚不受支持。"

但是,如果我将属性名称"Type"中的字符串更改为"Typeo"或"ASDF"等其他内容,则映射成功。换句话说,如果将属性名称更改为"RegionTypeo"。我违反了什么惯例吗?似乎有一些错误,包括字符串"类型"在我的属性名称。

下面是生成的错误:

Result Message:

Test method Rep.Tests.PlanServiceTest.GetBuildings threw exception: 
System.NotImplementedException: Expressions mapping from methods not supported yet.
Result StackTrace: 
at AutoMapper.PropertyMap.ResolveExpression(Type currentType, Expression instanceParameter)
at AutoMapper.QueryableExtensions.Extensions.CreateMemberBindings(IMappingEngine mappingEngine, Type typeIn, TypeMap typeMap, Expression instanceParameter)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression(IMappingEngine mappingEngine, Type typeIn, Type typeOut, Expression instanceParameter)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression(IMappingEngine mappingEngine, Type typeIn, Type typeOut)
at AutoMapper.QueryableExtensions.Extensions.<>c__DisplayClass12.<CreateMapExpression>b__0(TypePair tp)
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)
at AutoMapper.Internal.DictionaryFactoryOverride.ConcurrentDictionaryImpl2.GetOrAdd(TKey key, Func2 valueFactory)
at AutoMapper.QueryableExtensions.Extensions.CreateMapExpression[TSource,TDestination](IMappingEngine mappingEngine)
at AutoMapper.QueryableExtensions.ProjectionExpression1.ToTResult
at Rep.Services.PlanService.GetBuildings() in c:DevREPRepServicesPlanService.cs:line 369
at Rep.Tests.PlanServiceTest.GetBuildings() in c:DevREPRep.TestsPlanServiceTest.cs:line 50

根据源代码,您可以看到当您尝试在对象上映射函数时抛出异常:

public ExpressionResolutionResult ResolveExpression(Type currentType, Expression instanceParameter)
{
    Expression currentChild = instanceParameter;
    Type currentChildType = currentType;
    foreach (var resolver in GetSourceValueResolvers())
    {
        var getter = resolver as IMemberGetter;
        if (getter != null)
        {
            var memberInfo = getter.MemberInfo;
            var propertyInfo = memberInfo as PropertyInfo;
            if (propertyInfo != null)
            {
                currentChild = Expression.Property(currentChild, propertyInfo);
                currentChildType = propertyInfo.PropertyType;
            }
            else
            {
                throw new NotImplementedException("Expressions mapping from methods not supported yet.");
            }
        }
        else
        {
            var oldParameter = CustomExpression.Parameters.Single();
            var newParameter = instanceParameter;
            var converter = new ConversionVisitor(newParameter, oldParameter);
            currentChild = converter.Visit(CustomExpression.Body);
            currentChildType = currentChild.Type;
        }
    }
    return new ExpressionResolutionResult(currentChild, currentChildType);
}

根据OP的澄清,我无法复制以下问题:

public class Class1
{
    public string StringType { get; set; }
    public Func<Class1> FuncType { get; set; }
    public Class1 Class1Type { get; set; }
}
public class Class2
{
    public string StringType { get; set; }
    public Func<Class1> FuncType { get; set; }
    public Class1 Class1Type { get; set; }
}
/* ... */
AutoMapper.Mapper.CreateMap<Class1, Class2>();
var c1 = new Class1() { Class1Type = new Class1(), FuncType = () => new Class1(), StringType = "Class1" };
var c2 = AutoMapper.Mapper.Map<Class1, Class2>(new Class1());

相关内容

  • 没有找到相关文章

最新更新