ste*_*776 5 c# asp.net asp.net-mvc asp.net-mvc-3
我有EF一个EF生成的Person类,它有几个属性.我还有一个有几个属性的职位.一个人与多个工作有关,因此工作是人的收集财产.
我已经创建了一个视图模型:
public class PersonViewModel
{
public Person Person{ get; set; }
public List<Job> Jobs{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,我发布了PersonViewModel的一个实例.我想使用AutoMapper将此viewmodel映射回Person的实例,其Jobs集合属性填充了视图模型中的列表.
这可以实现吗?到目前为止,我尝试过:
Mapper.CreateMap<PersonViewModel, Person>();
Run Code Online (Sandbox Code Playgroud)
没有运气......
编辑:
好的,这确实有效.我发现我在其他地方有问题......
我的Person对象也与PersonType表有一对多的关系... PersonType成为Person的导航属性,自动映射器试图映射这个......这是它失败的地方......我成功地将PersonTypeID传递给将人员与人员类型相关联.我原以为这就是我需要做的一切.我怎样才能解决这个问题......
编辑2: 所以基本上我在DB中的Person表有一个PersonTypeID列(PersonType表的外键)...这被作为PersonType对象的Person的导航属性映射...
从我的视图中的表单,我有一个下拉列表来选择人类类型,它在视图模型中的Person对象中传递PersonTypeID属性...
automapper似乎正在寻找Person的PersonType nav属性的值来映射...我得到了一个 AutoMapper.AutoMapperMappingException
错误
Destination property: PersonType
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
Run Code Online (Sandbox Code Playgroud)
是的,这应该有效.如果Model和ViewModel共享相同的属性 - 无论是集合 - 它们将由AutoMapper 自动映射,但是:
Job和JobViewModel这样的集合是不同类型的(但指定的方法相同)的只需要创建一个映射为这些孩子的.我的预感是这应该解决你的问题:创建地图两种方式来看看它是否有帮助:
Mapper.CreateMap<PersonViewModel, Person>();
Mapper.CreateMap<Person, PersonViewModel>();
Run Code Online (Sandbox Code Playgroud)
如果ViewModel和Model上有属性,并且它们的类型不同,则AutoMapper将不知道如何转换它们.所以一种选择就是忽略它们:
或者您可以使用自定义映射:
http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/
| 归档时间: |
|
| 查看次数: |
8158 次 |
| 最近记录: |