【发布时间】:2013-12-29 19:00:34
【问题描述】:
我正在尝试使用 AutoMapper 第一次使用 ViewModel。我有两个模型:
public class Item
{
public int ItemId { get; set; }
public bool Active { get; set; }
public string ItemCode { get; set; }
public string Name { get; set; }
public List<ItemOption> ItemOptions { get; set; }
//...
}
public class ItemOption
{
public int ItemOptionId { get; set; }
public string Name { get; set; }
public string Barcode { get; set; }
//...
}
我已经变成了两个 ViewModel:
public class ItemDetailViewModel
{
public int ItemDetailViewModelId { get; set; }
public int ItemId { get; set; }
public bool Active { get; set; }
public string ItemCode { get; set; }
public string Name { get; set; }
public List<ItemDetailItemOptionViewModel> ItemOptions { get; set; }
}
public class ItemDetailItemOptionViewModel
{
public int ItemDetailItemOptionViewModelId { get; set; }
public int ItemOptionId { get; set; }
public string Name { get; set; }
public string Barcode { get; set; }
}
然后我在我的应用程序启动中设置以下内容:
Mapper.CreateMap<Item, ItemDetailViewModel>();
Mapper.CreateMap<ItemOption, ItemDetailItemOptionViewModel>();
最后我搭建了我的 ItemDetailViewModel:
然后我构建了我的项目并通过 /Item/Create 添加了一个新项目
我查看了数据库,希望看到我会在 Item 表中有一个条目,但是我有 ItemDetailViewModel 和 ItemDetailItemOptionViewModel 表,这是我没想到的,数据是 ItemDetailViewModel。
我认为我的脚手架做错了什么?如何在不使其成为主要业务模型的一部分的情况下脱离 ViewModel?
更多详情
如果无法使用 ViewModel 搭建控制器,那么如何在控制器中引用 ViewModel 并将更改保存回数据库?
例如,一旦我从数据库上下文中删除 ItemDetailViewModel,以下内容会发生什么变化?
//
// POST: /Item/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ItemDetailViewModel itemdetailviewmodel)
{
if (ModelState.IsValid)
{
db.ItemDetailViewModels.Add(itemdetailviewmodel);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(itemdetailviewmodel);
}
更多详情 [2]
那么我的索引/详细信息应该这样工作是否正确,或者有更好的方法吗?
//
// GET: /Item/
public ActionResult Index()
{
var items = db.Items.ToList();
var itemdetailviewmodel = AutoMapper.Mapper.Map<ItemDetailViewModel>(items);
return View(itemdetailviewmodel);
}
//
// GET: /Item/Details/5
public ActionResult Details(int id = 0)
{
ItemDetailViewModel itemdetailviewmodel = AutoMapper.Mapper.Map<ItemDetailViewModel>(db.Items.Find(id));
if (itemdetailviewmodel == null)
{
return HttpNotFound();
}
return View(itemdetailviewmodel);
}
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 viewmodel