【发布时间】:2016-01-28 20:51:41
【问题描述】:
有没有人遇到过以下情况。我有一个 MVC 应用程序,我正在使用实体框架。我有一个要填充到下拉框中的外键,当用户选择他们的选择并提交表单时,我收到一个关于无法映射的错误。
我有以下实体:
public Class City{
public int Id {get; set;}
public string Name {get; set;}
}
public class Property {
public int Id {get; set;}
public string Description {get; set;}
public Virtual City City {get; set;}
}
我有以下视图模型
public class AddPropertyVM {
public AddPropertyViewModel(IEnumerable<City> cities){
_cities = cities;
}
public AddPropertyViewModel(){}
public string Description {get; set;}
public int SelectedCityId {get; set;}
public IEnumerable<SelectListItem> CitiesItems {
get {
return new SelectList(_cities, "Id", "Name");
}
}
private IEnuermable<City> _cities {get; set;}
}
我有以下 AutoMapper 配置:
config.CreateMap<Property, AddPropertyViewModel>().ReverseMap();
当我尝试像这样将 VM 映射回属性实体时:
var newProperty = AutoMapper.Mapper.Map<AddPropertyViewModel, Property>(property);
我收到以下错误:
缺少类型映射配置或不支持的映射。
映射类型: Int32 -> 城市 System.Int32 -> Test.Entities.City
目标路径: 物业.城市.城市
来源价值: 2
有人知道为什么会这样吗?任何帮助/指导将不胜感激。
就这么清楚了。我正在尝试从 SelectedCityId 中取回 City。
我已尝试设置 AfterMap,但仍然遇到同样的问题:
config.CreateMap<AddPropertyViewModel, Property>().AfterMap((s, d) => d.City = new City { id = s.City });
【问题讨论】:
-
不想变得粗鲁,但如果我看到你将
Property映射到AddPropertyViewModel,我想知道你是否了解 AutoMapper 的用途。唯一可以按约定映射的属性是Description。其余的我看不到任何指定的成员映射。另外,我认为您有一两个错字。类名应该是AddPropertyViewModel,AutoMapper 不可能配对SelectedCityId和City(显然是这样)。 -
您好,谢谢。实际上,我在 Entity 和 VM 上有更多匹配的属性。为简洁起见,我在这里仅列出了一些属性。我尝试将 SelectedCityId 更改为 City 但这也不起作用。我不确定如何映射到 Navigational 属性。我有 City id,但 automapper 无法将其映射到 City 对象。
-
不,当然不能。你认为它应该如何自己做到这一点?
-
Automapper 需要一些额外的配置。这就是为什么我要问是否有人遇到过类似的情况。我现在正在玩 AfterMap。我也许可以创建一个新城市
-
@GertArnold 按建议更新
标签: c# entity-framework model-view-controller automapper viewmodel