如何使用实体框架在mvc 4 razor中同时在多个表中插入数据

时间:2015-08-19 12:25:05

标签: asp.net-mvc-4 razor

我的控制器

public ActionResult Create(Product collection1, Coin_Bar collection2, Jewellery collection3, Gift collection4, StockDetail collection5, ProductRating collection6)
        {
            //var vm=new ViewModel();
            //vm.Coin_Bars=entity.Coin_Bar();
            //vm.
        if (ModelState.IsValid)
        {
            var result1=entity.Products.Add(collection1);
            entity.SaveChanges();
            long ProductIds = result1.ProductId;

            collection2.ProductId = ProductIds;
            var result2 = entity.Coin_Bar.Add(collection2);
            entity.SaveChanges();

            collection3.ProductId = ProductIds;
            var result3 = entity.Jewelleries.Add(collection3);
            entity.SaveChanges();

            collection4.ProductId = ProductIds;
            var result4 = entity.Gifts.Add(collection4);
            entity.SaveChanges();

            collection5.ProductId = ProductIds;
            var result5 = entity.StockDetails.Add(collection5);
            entity.SaveChanges();

            collection6.ProductId = ProductIds;
            var result6 = entity.ProductRatings.Add(collection6);
            entity.SaveChanges();

            return RedirectToAction("Index");
        }
        return View();
    }

如何在一个视图中为所有表字段添加视图?请帮帮我..

1 个答案:

答案 0 :(得分:0)

MVC视图只能用于单个模型。因此,您无法将多个不同实体类型的数据发回作为您尝试在您提供的代码中执行的单独参数。

但是,你可以利用视图模型来封装所有这些,这样你就可以单独使用它们,同时仍然只传递一个"模型"在视图中来回。例如:

public class CollectionViewModel
{
    public CollectionViewModel()
    {
        Product = new Product();
        Coin_Bar = new Coin_Bar();
        Jewellery = new Jewellery();
        StockDetail = new StockDetail();
        ProductRating = new ProductRating();
    }

    public Product Product { get; set; }
    public Coin_Bar Coin_Bar { get; set; }
    public Jewellery Jewellery { get; set; }
    public Gift Gift { get; set; }
    public StockDetail StockDetail { get; set; }
    public ProductRating ProductRating { get; set; }
}

在get动作中新建此视图模型并将其传递给视图:

var model = new CollectionViewModel();
return View(model);

然后,在您的视图中,您可以为每个字段创建字段:

@model Namespace.To.CollectionViewModel

...

@Html.EditorFor(m => m.Product.SomeProperty)

最后,在您发布操作后,您会收到视图模型:

public ActionResult Create(CollectionViewModel model)