4つのテーブルがあります。 OperationTable、ClientTable、ClientDetails、OperationRes
ClientTable
ClientDetails
OperationTable
OperationRes
私はクライアントにsmthに登録するためのフォームに記入するように求めるページがあります。すべてが1つのページになければならず、クライアントがフォームを送信した後、すべてのデータをそのテーブルに挿入する必要があります。 OperationTableの日付と時刻、ClientTableの名前と姓など。私はASP.NET MVCの新人です。 「Code Fisrt」を使ってみました。モデルを作成し、それを使用してビューとコントローラーを自動生成しました。しかし、それは私が欲しいものではありません。私はこれを見つけました チュートリアル 。できます!しかし、私は4つ以上のテーブルを持っています。最良の解決策は何ですか?
挿入するすべてのデータを保持するビューモデルが必要な場合は、コントローラーでそのビューモデルに基づいてオブジェクトを作成し、EFを使用して挿入します。何かのようなもの:
public class MyViewModel
{
public string Name {get; set;}
public string Birthday {get; set;}
public string VerNumber { get; set;}
public string Email {get; set;}
public string Address {get; set;}
// etc etc for the rest of your data
}
次に、コントローラーで、ViewModelを使用してエンティティを設定し、EFを使用して挿入します。
[HttpPost]
public ActionResult Add(MyViewModel model)
{
var client = new Client{
Name = model.Name,
Birthday = model.Birthday
};
var clientDetails = new ClientDetails();
//etc for your other entities
using (var context = new MyDbContext)
{
context.Clients.Add(client);
clientDetails.ClientId = client.Id;
context.ClientDetails.Add(clientDetails);
//etc add your other classes
context.SaveChanges();
}
//whatever you want to do here for the result, maybe direct to new controller
//or return view
return View();
}
Repository Pattern を使用してエンティティフレームワークのコードを整理することを検討することをお勧めします。また、ビューモデルからエンティティをマップするために automapper を確認して、手動で実行することを保存することもできます。
論理的には、操作はチュートリアルショーとまったく同じになります。 4つのテーブルフィールドすべてを含むViewModelを作成する必要があるだけです。
次に、フォームがポストバックするときに、ViewModelのどのフィールドがどのテーブルのモデルに移動するかを決定するロジックを実行します。次に、そのテーブルモデルを保存します。
チュートリアルでは、1つのViewModel(LoginViewModel)を使用し、2つのテーブル(Login、User)に保存します。あなたの場合、4(OperationTable、ClientTable、ClientDetails、OperationRes)に保存するだけです。