2

私は単なる標準的な先駆者であり、ASP.NET MVC 3 を介してプログラミングすることを独学しているため、私の知識は基本的なものであり、概念的には、自分がやろうとしていることに対するより良いアプローチに対してオープンです。

だから、ここに私がやろうとしていることがあります:

会社とユーザーのデータを収集する ViewModel を作成しました。私の意図は、このデータを Company と User の 2 つの Domain Models に保存することです。ここで、CompanyのIdUserの外部キーです。さらに、メンバーシップを作成するために必要なユーザー データを渡したいと思います。

私の問題は、基本的な 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; }
}
}

そして、これが私の問題領域であるControllerです。

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

        return RedirectToAction("Index");
    }

ご覧のとおり、問題なく会社レコードを作成できます。しかし、 User テーブルに新しい行を作成できるように、作成したばかりのレコードから会社IDを簡単に取得する方法がわからないため、行き詰まっています。

この種の問題に取り組むためのコードの提案、または概念的な提案は大歓迎です!

4

1 に答える 1

1

ID が SQL Server で生成される場合、属性を追加できます: [Key,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");
}
于 2012-08-03T06:34:52.953 に答える