我的第一个MVC3 EF 4.2网站,我对一些事情感到困惑,目前在ViewModels查询和保存时。如果我解释得不好,请纠正我,我不知道怎么说这个。 .edmx自动创建了表类,但我认为最好创建一个ViewModel,考虑到我需要连接表来完全显示/编辑我的产品。下面的控制器代码是我连接表以输出要编辑的产品然后保存的地方。我的问题 - 将产品保存到DbContext或我自己的ProductViewModel.cs生成的Product.cs模型的正确方法是什么?
是否有更简单的方法来查询产品并加入表格然后映射到viewmodels参数,或者我是否继续在控制器中执行所有这些操作,如下所示?
我还想在每次有人查看/点击产品时保存/更新产品,因此我不确定是否创建单独的ViewModel以仅更新该参数或再次使用产品型号。
希望有道理!如果需要,我可以进一步解释。
private SiteForgeEntities db = new SiteForgeEntities();
public ActionResult Edit(int id)
{
var viewModel = (
from a in db.Products
join b in db.Sites
on a.SiteId equals b.SiteId
join c in db.Sections
on a.SectionId equals c.SectionId
join d in db.Affiliates
on a.AffiliateId equals d.AffiliateId
select new ProductViewModel()
{
ProductId = a.ProductId,
Product = a.Product,
Description = a.Description,
Image = a.Image,
Price = a.Price,
Clicks = a.Clicks,
Link = a.Link,
Site = b.Site,
Section = c.Section,
Affiliate = d.Affiliate
}).Single(x => x.ProductId == id);
return View(viewModel);
}
[HttpPost]
public ActionResult Edit(Product product)
{
...update database...do I pass in and save back to Product or my ProductViewModel
}
答案 0 :(得分:0)
使用ViewModel将多个模型传递给视图,但是在保存数据时,需要将其保存到适当的模型中。如果要添加或修改产品,则会向产品添加项目(使用DbContext)。如果在两个模型之间定义了一对多关系(在Product.cs模型中,您可能将属性声明为:
public virtual ICollection<SomeOtherModel> SomeOtherData { get; set; }
您可以使用它来构建表,而不是在ViewModel中传递所有内容。这里有一个关于使用EF4的CRUD操作的很好的教程。看看这些简短的教程,可以让您了解您的策略http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc。