C# 自动映射-在C中创建映射#
我刚刚开始使用AutoMapper,想弄清楚一些事情 假设我想在用户和UserDto之间无缝映射 这些示例似乎都建议我必须先到一个启动区域(例如WebApiConfig.cs或startup.cs或global.axax等)执行以下操作:C# 自动映射-在C中创建映射#,c#,asp.net,asp.net-web-api,automapper,C#,Asp.net,Asp.net Web Api,Automapper,我刚刚开始使用AutoMapper,想弄清楚一些事情 假设我想在用户和UserDto之间无缝映射 这些示例似乎都建议我必须先到一个启动区域(例如WebApiConfig.cs或startup.cs或global.axax等)执行以下操作: Mapper.CreateMap<User, UserDto>(); Mapper.CreateMap(); 假设我有50或100个需要映射的实体/DTO,我需要添加50或100行代码,并在一个类到另一个类之间进行映射?肯定有更聪明的方法,对吗
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap();
假设我有50或100个需要映射的实体/DTO,我需要添加50或100行代码,并在一个类到另一个类之间进行映射?肯定有更聪明的方法,对吗
如果我不需要做任何特定的映射/覆盖,我真的需要这样做吗?我一定是误解了框架的基本原理,因为我觉得这是错误的
谢谢 只要所有内容都与源和目标匹配,就可以使用
DynamicMap
:
var target = Mapper.DynamicMap<TSource, TTarget>(source);
var target=Mapper.DynamicMap(源代码);
但是,根据需要创建映射会更有效:
if (Mapper.FindTypeMapFor<TSource, TTarget>() == null)
{
Mapper.CreateMap<TSource, TTarget>();
}
var target = Mapper.Map<TSource, TTarget>(source);
if(Mapper.FindTypeMapFor()==null)
{
CreateMap();
}
var target=Mapper.Map(源);
只要所有内容都与源和目标匹配,您就可以使用DynamicMap
:
var target = Mapper.DynamicMap<TSource, TTarget>(source);
var target=Mapper.DynamicMap(源代码);
但是,根据需要创建映射会更有效:
if (Mapper.FindTypeMapFor<TSource, TTarget>() == null)
{
Mapper.CreateMap<TSource, TTarget>();
}
var target = Mapper.Map<TSource, TTarget>(source);
if(Mapper.FindTypeMapFor()==null)
{
CreateMap();
}
var target=Mapper.Map(源);
肯定有更聪明的方法,对吧?
。不是真的。除非你想通过反射来实现。但是如果将来你想要一个特定映射的特定规则,你就有问题了。哇,好的,谢谢。我觉得在我的控制器中手动写出映射(当我想在两件事之间映射时)的事实足以让映射者理解这两种类型,但我想不是。好的,谢谢(通过阅读文档)您是否了解可以在一个类中创建所需的所有映射(比如EntityToViewModel)并在global.asax中注册该类?在控制器中创建它们可能会生成一些重复的代码,我想这就是您所关心的问题?使用动态映射时,您会错过一件非常重要的事情,那就是配置验证。如果您输入了一些内容,或者重命名了一些内容,您将不会遇到任何运行时故障。您将只拥有一个没有值的未映射属性。不要在这里走捷径。肯定有更聪明的方法,对吗?
。不是真的。除非你想通过反射来实现。但是如果将来你想要一个特定映射的特定规则,你就有问题了。哇,好的,谢谢。我觉得在我的控制器中手动写出映射(当我想在两件事之间映射时)的事实足以让映射者理解这两种类型,但我想不是。好的,谢谢(通过阅读文档)您是否了解可以在一个类中创建所需的所有映射(比如EntityToViewModel)并在global.asax中注册该类?在控制器中创建它们可能会生成一些重复的代码,我想这就是您所关心的问题?使用动态映射时,您会错过一件非常重要的事情,那就是配置验证。如果您输入了一些内容,或者重命名了一些内容,您将不会遇到任何运行时故障。您将只拥有一个没有值的未映射属性。不要走捷径。