ASP.NET MVC 3如何将ViewModel数据保存到多个关联表

时间:2012-08-02 15:03:59

标签: c# asp.net database asp.net-mvc-3

只是一个标准的前身,我正在教自己通过ASP.NET MVC 3进行编程,所以我的知识是基本的,从概念上讲,我愿意采用更好的方法来实现我的目标。

所以,这就是我要做的事情:

我创建了一个收集公司和用户数据的ViewModel。我的目的是将此数据保存到两个域模型,公司和用户中,其中公司中的标识用户中的外键。此外,我想传递必要的用户数据来创建会员资格。

我的问题是,现在我已经超越了基本的ASP.NET MVC教程中的基本强类型模型关联,我不知道如何通过HttpPost同步所有内容。

这是我的 ViewModel

public class SPCompanyViewModel
{
    [Required]
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }

    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

以下是公司用户的域名模型:

namespace BidFetcher.Models.ServiceProvider
{
public class SPCompany
{
    public int Id { get; set; }
    public string CompanyName { get; set; }
}

public class SPUser
{
    public int Id { get; set; }
    public int SPCompanyId { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}
}

这是我的问题区域,控制器

[HttpPost]
    public ActionResult Create(SPCompanyViewModel viewModel)
    {
        var spCompany = new SPCompany
        {
            CompanyName = viewModel.CompanyName,
        };
        db.SPCompany.Add(spCompany);

        return RedirectToAction("Index");
    }

如您所见,我可以毫无问题地创建公司记录。但是,现在我被卡住了,因为我不确定如何轻松地从我刚刚创建的记录中抓取公司 Id ,以便我可以在User表中创建一个新行。

非常感谢任何代码建议或解决此类问题的概念性建议!

1 个答案:

答案 0 :(得分:1)

如果您的id是在sql server上生成的,则可以添加Attribute: [密钥,DatabaseGenerated(DatabaseGeneratedOption.Identity)] db.SaveChanges()之后,此键的值将在您的实体中 例如:

public class SPCompany
{
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string CompanyName { get; set; }
}

[HttpPost]
public ActionResult Create(SPCompanyViewModel viewModel)
{
    var spCompany = new SPCompany
    {
        CompanyName = viewModel.CompanyName,
    };
    db.SPCompany.Add(spCompany);
    db.SaveChanges();
    var spCompanyId = spCompany.Id //there you get id of new record

    return RedirectToAction("Index");
}