我的DTO(簡化用於演示目的):Automapper映射問題:從壓扁到DTO作品視圖模型 - 不工作的其他方式
項目(DTO映射到我的問題視圖模型):
public class Item {
public Item() { }
public virtual Guid ID { get; set; }
public virtual ItemType ItemType { get; set; }
public virtual string Title { get; set; }
}
的ItemType(我的項目類引用):
public class ItemType {
public ItemType() { }
public virtual Guid ID { get; set; }
public virtual IList<Item> Items { get; set; }
public virtual string Name { get; set; }
}
我的視圖模型(編輯我的項目類數據):
public class ItemEditViewModel {
public ItemEditViewModel() { }
public Guid ID { get; set; }
public Guid ItemTypeID { get; set; }
public string Title { get; set; }
public SelectList ItemTypes { get; set; }
public IEnumerable<ItemType> ItemTypeEntities { get; set; }
public BuildItemTypesSelectList(Guid? itemTypeID)
{
ItemTypes = new SelectList(ItemTypeEntities, "ID", "Name", itemTypeID);
}
}
我AutoMapper映射代碼:
Mapper.CreateMap<Item, ItemEditViewModel>()
.ForMember(dest => dest.ItemTypes, opt => opt.Ignore());
Mapper.CreateMap<ItemEditViewModel, Item>();
控制器代碼(同樣,簡化了演示):
public ActionResult Create()
{
var itemVM = new ItemEditViewModel();
// Populates the ItemTypeEntities and ItemTypes properties in the ViewModel:
PopulateEditViewModelWithItemTypes(itemVM, null);
return View(itemVM);
}
[HttpPost]
public ActionResult Create(ItemEditViewModel itemVM)
{
if (ModelState.IsValid) {
Item newItem = new Item();
AutoMapper.Mapper.Map(itemVM, newItem);
newItem.ID = Guid.NewGuid();
...
// Validation and saving code here...
...
return RedirectToAction("Index");
}
PopulateEditViewModelWithItemTypes(itemVM, null);
return View(itemVM);
}
現在,這裏發生的事情:
在我的HttpPost創建行動導致我的控制器在我使用Automapper將我的ItemEditViewModel映射到我的Item DTO類s時,在SelectList中選擇的ItemType ID值不會綁定到Item.ItemType.ID屬性。 Item.ItemType屬性爲null。
我認爲這是因爲我的Item DTO類中沒有ItemTypeID Guid值,並且我沒有在Item DTO中爲同名的屬性創建新的ItemType類,所以AutoMapper是無法存儲ItemType ID值。
我認爲這歸結於我的Automapper映射配置。
我確定這是簡單的,我俯瞰。
在此先感謝您的任何建議!
這是令人失望的。看起來好像在我的ViewModel到DTO的映射配置中,我可以指定一個ItemType類的構造函數,從ViewModel中綁定我選擇的ItemTypeID。我已經有一個ItemType的構造函數,它接受ID的Guid參數。現在,我修改了Create HttpPost ActionResult方法,通過使用構造函數將DTO的ItemType屬性設置爲新的ItemType對象:newItem.ItemType = new ItemType(itemVM.ItemTypeID); – hiro77 2011-06-15 18:24:01