我正在使用Automapper,我有以下场景:类OrderModel有一个名为'ProductName'的属性,它不在数据库中.所以当我尝试使用以下方法进行映射时:
Mapper.CreateMap<OrderModel, Orders>();
Run Code Online (Sandbox Code Playgroud)
它会生成一个异常:
"Project.ViewModels.OrderModel上的以下1个属性未映射:'ProductName'
我已经阅读了AutoMapper的Wiki for Projections相反的情况(额外的属性在目的地,而不是在源,这实际上是我的情况)
如何避免使用automapper来映射此属性?
我是.NET的新手,我决定解决.NET Core而不是学习"老方法".我在这里找到了一篇关于为.NET Core设置AutoMapper的详细文章,但新手有更简单的演练吗?
我使用AutoMapper中的ASP.NET MVC应用程序.有人告诉我,我应该搬到AutoMapper.CreateMap其他地方,因为他们有很多开销.我不太确定如何设计我的应用程序将这些调用放在一个地方.
我有一个Web层,服务层和数据层.每个项目都有自己的.我用NinjectDI来做一切.我将AutoMapper在网络和服务层使用.
那么你AutoMapper的CreateMap 设置是什么?你把它放在哪里?你怎么称呼它?
每次我在StackOverflow上寻找AutoMapper时,我都在阅读有关ValueInjecter的内容.
有人能告诉我它们之间的优缺点(性能,功能,API使用,可扩展性,测试)吗?
有没有办法告诉AutoMapper忽略除明确映射的属性之外的所有属性?
我有外部DTO类可能会从外部更改,我想避免指定要显式忽略的每个属性,因为添加新属性会在尝试将它们映射到我自己的对象时破坏功能(导致异常).
我是Automapper框架的新手.我有一个域类和一个DTO类,如下所示:
public class Employee
{
public long Id {get;set;}
public string Name {get;set;}
public string Phone {get;set;}
public string Fax {get;set;}
public DateTime DateOfBirth {get;set;}
}
public class EmployeeDto
{
public long Id {get;set;}
public string FullName {get;set;}
public DateTime DateOfBirth {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
注意:类的属性" Name "的名称与Employee类的属性" FullName "的名称不同EmployeeDto.
这是将Employee对象映射到的代码EmployeeDto:
Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee);
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我想将Employee(源类)映射到EmployeeDto(目标类),我该如何指定映射规则?换句话说,我应该如何处理上面的代码行(***)?
如果我的目标setter是私有的,我可能想使用目标对象的构造函数映射到该对象.你会如何使用Automapper做到这一点?
互联网上使用ViewModels并使用Automapper的每篇文章都提供了"Controller - > View"方向映射的指导.您将域模型与所有选择列表一起放入一个专门的ViewModel并将其传递给视图.这很清楚也很好.
视图有一个表单,最终我们处于POST操作中.这里所有的模型绑定器与[显然]另一个视图模型一起来到现场,它显然与原始的ViewModel 相关,至少在命名约定方面是为了绑定和验证.
如何将其映射到您的域模型?
让它成为插入动作,我们可以使用相同的Automapper.但如果是更新动作怎么办?我们必须从Repository中检索我们的Domain Entity,根据ViewModel中的值更新它的属性并保存到Repository.
附录1(2010年2月9日):有时,分配模型的属性是不够的.应根据View Model的值对域模型采取一些措施.即,应该在域模型上调用一些方法.可能应该有一种位于Controller和Domain之间的应用服务层,以便处理View Models ...
如何组织此代码以及将其放置在何处以实现以下目标?
asp.net-mvc domain-driven-design separation-of-concerns viewmodel automapper
我正在尝试设置AutoMapper以从实体转换为DTO.我知道我应该使用.ForMember()后Mapper.CreateMap<Entity, DTO>()设置自定义映射,但是这似乎并没有成为一个有效的方法.
编辑以供澄清:我不是要查找我已阅读的文档的链接,或者是基本语法的解释.我正在使用答案和文档中描述的正确语法,例如:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Run Code Online (Sandbox Code Playgroud)
如果我在CreateMap <>中有一个无效的类型名称,我可以看到"ForMember"作为一个有效的方法,鼠标悬停显示方法签名,正如我通常所期望的那样.但是,只要我给它两个有效类型,ForMember说它无法解析符号,就好像该方法不可用一样.
对于我没有遇到的泛型类,是否存在某种约束?
谢谢
automapper ×10
c# ×5
.net ×4
asp.net-mvc ×2
viewmodel ×2
asp.net-core ×1
constructor ×1
model ×1