MVC 3/EF 4.2-根据ViewModel编辑,我是根据Model还是ViewModel保存



我的第一个MVC3 EF 4.2站点和我在一些事情上感到困惑,目前在查询和保存时在ViewModels上。如果我解释得不好,请纠正我,我不知道该怎么说。edmx自动创建了表类,但我读到创建ViewModel更好,因为我需要连接表才能完全显示/编辑我的产品。下面的控制器代码是我连接表以输出要编辑的产品,然后保存的地方。我的问题是,将产品保存到DbContext生成的Product.cs模型或我自己的ProductViewModel.cs模型的正确方法是什么?

有没有一种更简单的方法可以查询产品并连接表,然后映射到视图模型参数,或者我可以像下面这样在控制器中继续执行所有这些操作?

我还想在每次有人查看/点击产品时保存/更新产品,所以我不确定是创建一个单独的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
    }

使用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.

相关内容

  • 没有找到相关文章

最新更新