Мои 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 (на который ссылается мой класс Item):
public class ItemType {
public ItemType() { }
public virtual Guid ID { get; set; }
public virtual IList<Item> Items { get; set; }
public virtual string Name { get; set; }
}
Моя ViewModel (для редактирования данных моего класса Item):
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);
}
}
Код сопоставления My 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 Create в моем контроллере, где я использую Automapper для сопоставления моего ItemEditViewModel с моим классом Item DTO, значение идентификатора ItemType, выбранное в SelectList, не привязывается к свойству Item.ItemType.ID. Свойство Item.ItemType имеет значение null.
Я предполагаю, что это потому, что, поскольку у меня нет значения ItemTypeID Guid в моем классе Item DTO, и я не создал новый класс ItemType для свойства с тем же именем в моем Item DTO, AutoMapper не может сохранить значение идентификатора ItemType.
Я думаю, что все сводится к моей конфигурации сопоставления Automapper.
Я уверен, что это что-то простое, что я пропускаю.
Заранее спасибо за любой совет!