2012-08-02 74 views
2

只是一个标准的先驱,我在教自己通过ASP.NET MVC 3进行编程,所以我的知识是基本的,在概念上我更乐于接受更好的方法到我正在尝试做的事情。ASP.NET MVC 3如何将ViewModel数据保存到多个关联表格

所以,这里是我想要做的事:

我创建了集公司和用户数据的视图模型。我的意图是将此数据保存到两个域模型,公司和用户,其中Id公司用户的外键。此外,我想传递必要的用户数据来创建成员资格。

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

这里是我的视图模型

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,以便我可以在用户表中创建一个新行。

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

+0

您是否使用EF或ADO.net来读取和写入数据库? – 2012-08-02 15:08:20

+0

我通过EF使用基本的代码优先。 – 2012-08-02 15:09:55

回答

1

如果SQL服务器上生成您的ID,您可以添加属性: [键,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"); 
}