Asp.net mvc 2 从AutoMapper到Emit Mapper

Asp.net mvc 2 从AutoMapper到Emit Mapper,asp.net-mvc-2,dto,projection,emitmapper,Asp.net Mvc 2,Dto,Projection,Emitmapper,我最近发现了AutoMapper,用于连接ViewModels和我的实际DB对象。我使用它的方式如下所述: 我发现了Emit Mapper to:),但找不到任何类似的内容(我可以在其中指定自定义投影规则): 提前谢谢 这是我遇到的最好的解决方案: 检查最后一篇文章中的解决方案。它工作得非常好 更新:代码供将来参考: 公共类ExtDefaultMapConfig:DefaultMapConfig { 专用只读词典_properties=new Dictionary(); public ExtD

我最近发现了AutoMapper,用于连接ViewModels和我的实际DB对象。我使用它的方式如下所述:

我发现了Emit Mapper to:),但找不到任何类似的内容(我可以在其中指定自定义投影规则):


提前谢谢

这是我遇到的最好的解决方案:

检查最后一篇文章中的解决方案。它工作得非常好

更新:代码供将来参考:

公共类ExtDefaultMapConfig:DefaultMapConfig { 专用只读词典_properties=new Dictionary(); public ExtDefaultMapConfig FormMember(字符串属性,Func Func) { if(!\u properties.ContainsKey(property)) _添加(属性,func); 归还这个; } 公共ExtDefaultMapConfig FormMember(表达式dstMember,Func Func) { var prop=ReflectionHelper.FindProperty(dstMember); 返回表单成员(属性名称、函数); } 公共ExtDefaultMapConfig忽略(表达式dstMember) { var prop=ReflectionHelper.FindProperty(dstMember); IgnoreMembers(新[]{prop.Name}); 归还这个; } 公共重写IMappingOperation[]GetMappingOperations(类型from,类型to) { var list=新列表(); list.AddRange(base.GetMappingOperations(from,to)); list.AddRange( 过滤器操作( 从…起 到 ReflectionUtils.GetPublicFieldsAndProperties(到) .Where(f=>_properties.ContainsKey(f.Name)) .选择( m=> (IMappingOperation)新的去写操作 { 目的地=新成员描述符(m), 吸气剂= (估价师) ( (值、状态)=> { WriteLine(string.Format(“映射器:获取字段或属性{0}的值,m.Name)); 返回值write.ReturnValue(_属性[m.Name]((TSrc)值)); } ) } ) ) ); return list.ToArray(); } } 类ReflectionHelper { 公共静态MemberInfo FindProperty(LambdaExpression LambdaExpression) { 表达式=lambdaExpression; 布尔标志=假; while(!flag) { 开关(表达式.节点类型) { 大小写表达式类型。转换: 表达式=((一元表达式)表达式)。操作数; 打破 大小写表达式类型。Lambda: 表达式=((LambdaExpression)表达式).Body; 打破 case ExpressionType.MemberAccess: MemberExpression MemberExpression=(MemberExpression)表达式; if(memberExpression.Expression.NodeType!=ExpressionType.Parameter&&memberExpression.Expression.NodeType!=ExpressionType.Convert) 抛出新的ArgumentException(string.Format(“表达式“{0}”必须解析为顶级成员。”,lambdaExpression),“lambdaExpression”); 返回memberExpression.Member; 违约: flag=true; 打破 } } 返回null; } 公共静态对象GetValue(字符串属性,对象obj) { PropertyInfo pi=obj.GetType().GetProperty(属性); 返回pi.GetValue(obj,null); } }
    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date))