AutoMapper有什么意义?有人可以给我一个非常简单的例子吗?
我已观看了视频,但它没有点击。
萨姆
答案 0 :(得分:3)
通常,AutoMapper非常适合数据实体和业务模型之间的映射。例如,比方说,我有一个数据域类型,称之为PersonEntity
,它有一个属性数组:FirstName
,Surname
,Gender
等。不希望将我的数据域类型暴露给消费应用程序,因此我可以定义业务域类型,例如Person
,现在Person
类型可以包含其他业务逻辑,例如GetRelatedPersons
等,这些逻辑可能与您的数据域无关。在这种情况下,我有两种类型,PersonEntity
和Person
,在某些时候我将不得不编写样板代码来将属性从一个复制到另一个。我可以通过各种方式做到这一点,我可以:
1.Copy构造函数:
public Person(PersonEntity entity) {
2.Generalised Mapping Method:
public Person CreatePerson(PersonEntity entity) {
3.Implicit / Explicit Conversion:
public static implicit operator Person(PersonEntity entity) {
但AutoMapper允许您做的事情,很容易在这两种类型之间创建一个映射过程。因此,在其simiplist形式中,我可以:
Person person = Mapper.Map<PersonEntity, Person>(entity);
通过使用约定优先方法,AutoMapper框架将匹配属性从一个实例转换为下一个实例。如果您想要更精细的控制,它还允许您自定义类型的映射方式。
希望有所帮助。
答案 1 :(得分:2)
在ASP.NET MVC中(因为你已经标记了这一点),AutoMapper使得将ViewModel映射到域模型(例如Entity Framework POCO,Linq-To-Sql类)变得更加容易。
大多数情况下,我们的ViewModel包含许多实体,因此我们不能简单地执行context.AddObject(viewModel)
。通常我们必须拆分ViewModel,做多次添加等等。
这种手动拼接使你的控制器“胖”,这与它应该是相反的。
输入AutoMapper。
上面有一个很好/简单的例子here。
答案 2 :(得分:2)
说你有两个班级
class A
{
public string MyName;
public string MyAge;
}
class B
{
public string MyViewsName;
public string MyViewsAge;
}
我会说,(A是来源,B是目的地。)
Map<A,B>().ForMember(dest => dest.MyViewsName, o => o.MapFrom(src => src.MyName))
.ForMember(dest => dest.MyViewsAge, o => o.MapFrom(src => src.MyAge));
所以现在我可以拥有一个带有一些填充属性的对象A,然后说
var myBobject = MyMap.Map(MyAObject, new B());
现在,属性已映射到对象:D
如果你熟悉C ++,它是一个花哨的复制构造函数:D,希望有帮助