Reflection 自动映射与反射

Reflection 自动映射与反射,reflection,automapper,Reflection,Automapper,我的共享主机公司不允许反射。 如何使用AutoMapper 我是否必须为每个属性指定一个.FormMember Mapper.CreateMap<Person, PersonData>() .ForMember(dest => dest.Name, o => o.MapFrom(src => src.Name)) .ForMember(dest => dest.Address, o => o.MapFrom

我的共享主机公司不允许反射。 如何使用AutoMapper

我是否必须为每个属性指定一个.FormMember

Mapper.CreateMap<Person, PersonData>()
            .ForMember(dest => dest.Name, o => o.MapFrom(src => src.Name))
            .ForMember(dest => dest.Address, o => o.MapFrom(src => src.Address));
Mapper.CreateMap()
.ForMember(dest=>dest.Name,o=>o.MapFrom(src=>src.Name))
.ForMember(dest=>dest.Address,o=>o.MapFrom(src=>src.Address));
谢谢


菲利普一点也不。AutoMapper在智能映射方面做得很好。如果源对象和目标对象的属性名称相同,AutoMapper将自动为您映射此属性。

AutoMapper使用
反射。emit
,您确定可以使用AutoMapper吗

[编辑]

我不知道有没有使用无反射的,即使是我在CodePlex上创建的也使用反射。如果没有反射或反射,就很难设计一个

最简单和最基本的方法是,您可以使用这两种技术中的任何一种,或者同时使用这两种技术

public class ConversionHelper
{
   public static ClassB Convert(ClassA item)
   {
      return new ClassB() { Id = item.Id, Name = item.Name };
   }

   public static List<ClassB> Convert(List<ClassA> list)
   {
      return list.Select(o => new ClassB() { Id = o.Id, Name = o.Name }).ToList();
   }
}


public class ClassA
{
   public int Id { get; set; }
   public string Name { get; set; }
}
public class ClassB
{
   public int Id { get; set; }
   public string Name { get; set; }
}
公共类转换助手
{
公共静态ClassB转换(ClassA项)
{
返回新的ClassB(){Id=item.Id,Name=item.Name};
}
公共静态列表转换(列表)
{
return list.Select(o=>newclassb(){Id=o.Id,Name=o.Name}).ToList();
}
}
甲级公共课
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共B类
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}

从您给出的示例中,您无论如何都要一个接一个地映射属性,这是在相同的行上,但代码较少。

您不能使用Automapper或我所知道的任何其他映射体系结构而不进行反射。这在逻辑上是显而易见的。如何将两个未知实体映射到另一个实体,而不使用它们的任何反射属性?在这种情况下,您唯一的选择是创建一个自定义包,将一个对象转换为另一个对象。

这就是我想知道的,是否可以在不使用反射的情况下使用AutoMapper?或者你知道另一个映射工具不使用这个吗?是的,我已经像你建议的那样创建了一个helper类,但是如果你有很多DataContract想要映射到实体框架类,那么当你在数据库中添加一列时需要做大量的工作。你可以使用它为上面的helper转换和DataContract生成代码。它非常简单,从一个基本的例子开始,就像ASP.NET inlines脚本一样。ExpressMapper不使用反射。它使用表达式树。我认为应该认为它看起来很棒。我想使用没有反射的AutoMapper,因为托管公司不支持反射,这就是为什么我想知道.formember是否是唯一的解决方案。啊,对不起,我把你的问题搞错了:-/我不知道是否还有另一种不经思考就使用AutoMapper的可能性。这现在是错误的。看看哪一个根本不使用反射,而是使用表达式树。当然,这个答案也是2010年12月的。我知道。我只是想指出一下,以防有人在寻找这样的解决方案,但没有看日期。