Asp.net mvc 4 如何使用多个相关表创建ViewModel并保存表单

Asp.net mvc 4 如何使用多个相关表创建ViewModel并保存表单,asp.net-mvc-4,entity-framework-5,Asp.net Mvc 4,Entity Framework 5,考虑到现代版本,我试图找出实现这一目标的最佳方法。我正在使用VS2012 MVC4 EF5,并从数据库中构建了一个edmx文件。我构建了一个允许提交供应商信息的表单。主表是主要包含联系人信息的供应商表,还有其他表存储其多个类别选择(复选框列表),还有一个表存储其少数群体信息(单选按钮集合)。因此,我的ViewModel是供应商表,我用查看包填充复选框和单选按钮,这些查看包查询查找表中的值 因此,我假设我应该将类别和少数部分构建到ViewModel中,并以某种方式连接起来,以便数据库知道如何保存返

考虑到现代版本,我试图找出实现这一目标的最佳方法。我正在使用VS2012 MVC4 EF5,并从数据库中构建了一个edmx文件。我构建了一个允许提交供应商信息的表单。主表是主要包含联系人信息的供应商表,还有其他表存储其多个类别选择(复选框列表),还有一个表存储其少数群体信息(单选按钮集合)。因此,我的ViewModel是供应商表,我用查看包填充复选框和单选按钮,这些查看包查询查找表中的值

因此,我假设我应该将类别和少数部分构建到ViewModel中,并以某种方式连接起来,以便数据库知道如何保存返回的值,或者我应该使用viewbags,然后以某种方式在后期读取这些值并循环将其存储到数据库中?不管怎样,我都被卡住了,不知道怎么做

我在网上搜集了很多例子,但没有一个适合这种情况。这不是一个复杂的数据模型,但应该是相当普遍的现实情况。我是MVC新手,所以如果我遗漏了一些明显的东西,请原谅我

感谢您的指导

更新:下面是将ViewModel保存到db的baseic代码,但是如何保存复选框列表和单选按钮。我认为有两种方法1)以某种方式将它们包含在ViewModel中,或2)执行单独的功能以保存表单复选框和单选按钮值

        [HttpPost]
    public ActionResult Form(VendorProfile newProfile)
    {
        if (ModelState.IsValid)
        {
            newProfile.ProfileID = Guid.NewGuid();
            newProfile.DateCreated = DateTime.Now;

            _db.VendorProfiles.Add(newProfile);
            _db.SaveChanges();
            return RedirectToAction("ThankYou", "Home");
        }
        else
        {
            PopuplateViewBags();
            return View(newProfile);
        }
    }

也许另一种解释我的问题的方式是,如果你必须建立一个表单,人们可以在其中注册并从31种口味的列表中选择他们最喜欢的所有口味的冰淇淋。您需要在主表中保存此人的联系信息,然后在另一个表中保存他们的口味选择集合(一对多)。我有一个联系人表单的ViewModel和一个从查找表中显示的风格列表(复选框列表)。如何编写代码来保存此表单

解决方案:可能有更好的方法,但我想把我的发现发布出来。您可以传入复选框集合,然后将它们发送给另一个处理db插入的方法

        [HttpPost]
    public ActionResult Form(VendorProfile newProfile, int[] categories)
    {
        if (ModelState.IsValid)
        {
            newProfile.ProfileID = Guid.NewGuid();
            newProfile.DateCreated = DateTime.Now;

            _db.VendorProfiles.Add(newProfile);
            _db.SaveChanges();

            InsertVendorCategories(newProfile.ProfileID, categories);

            return RedirectToAction("ThankYou", "Home");
        }
        else
        {
            PopuplateViewBags();
            return View(newProfile);
        }
    }

    private void InsertVendorCategories(Guid ProfileID, int[] categories)
    {
        try
        {
            var PID = new SqlParameter("@ProfileID", ProfileID);
            var CID = new SqlParameter("@CatID", "");

            foreach (int c in categories)
            {
                CID = new SqlParameter("@CatID", c);
                _db.Database.ExecuteSqlCommand("Exec InsertVendorCategory @ProfileID, @CatID", PID, CID);
            }
        }
        catch { Exception ex; }
    }