Asp.net-mvc-databases
ASP.NET MVC-データベース
このチュートリアルで作成したすべてのASP.NET MVCアプリケーションでは、ハードコードされたデータをコントローラーからViewテンプレートに渡しました。 ただし、実際のWebアプリケーションを構築するには、実際のデータベースを使用することをお勧めします。 この章では、アプリケーションに必要なデータを保存および取得するためにデータベースエンジンを使用する方法について説明します。
データを保存および取得するには、Entity Frameworkと呼ばれる.NET Frameworkデータアクセステクノロジを使用して、モデルを定義および操作します。
Entity Framework(EF)はCode Firstテクニックをサポートします。これにより、単純なクラスを記述することでモデルオブジェクトを作成でき、クラスからその場でデータベースが作成されるため、非常にクリーンで迅速な開発ワークフローが可能になります。
簡単な例を見てみましょう。この例では、Entityフレームワークのサポートを追加します。
- ステップ1 *-Entity Frameworkをインストールするには、プロジェクトを右クリックし、NuGetパッケージマネージャー→ソリューション用のNuGetパッケージの管理…を選択します。
*NuGet Package Manager* が開きます。 検索ボックスでエンティティフレームワークを検索します。
Entity Frameworkを選択し、「インストール」ボタンをクリックします。 [プレビュー]ダイアログが開きます。
[OK]をクリックして続行します。
[同意する]ボタンをクリックして、インストールを開始します。
Entity Frameworkがインストールされると、上記のスクリーンショットに示すように、アウトウィンドウにメッセージが表示されます。
DBContextを追加
次のコードを使用してデータを取得および保存するために、Entity Frameworkと通信する別のクラスを従業員モデルに追加する必要があります。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace MVCSimpleApp.Models{
public class Employee{
public int ID { get; set; }
public string Name { get; set; }
public DateTime JoiningDate { get; set; }
public int Age { get; set; }
}
public class EmpDBContext : DbContext{
public EmpDBContext()
{ }
public DbSet<Employee> Employees { get; set; }
}
}
上記のように、 EmpDBContext は DbContext として知られるEFクラスから派生しています。 このクラスには、DbSetという名前のプロパティが1つあります。このプロパティは、基本的にクエリおよび保存するエンティティを表します。
接続文字列
Web.configファイルでデータベースの<configuration>タグの下に接続文字列を指定する必要があります。
<connectionStrings>
<add name = "EmpDBContext" connectionString = "Data
Source = (LocalDb)\v14.0;AttachDbFilename = |DataDirectory|\EmpDB.mdf;Initial
Catalog = EmployeeDB;Integrated Security = SSPI;"
providerName = "System.Data.SqlClient"/>
</connectionStrings>
実際には、EmpDBContext接続文字列を追加する必要はありません。 接続文字列を指定しない場合、Entity FrameworkはDbContextクラスの完全修飾名を使用してユーザーのディレクトリにlocalDBデータベースを作成します。 このデモでは、簡単にするために接続文字列を追加しません。
ここで、ハードコードされたデータを使用する代わりに、データベースからデータを実際に保存および取得できるように、EmployeeController.csファイルを更新する必要があります。
まず、プライベートEmpDBContextクラスオブジェクトを作成して追加し、次に、次のコードに示すように、Index、Create、Editアクションメソッドを更新します。
using MVCSimpleApp.Models;
using System.Linq;
using System.Web.Mvc;
namespace MVCSimpleApp.Controllers {
public class EmployeeController : Controller{
private EmpDBContext db = new EmpDBContext();
//GET: Employee
public ActionResult Index(){
var employees = from e in db.Employees
orderby e.ID
select e;
return View(employees);
}
//GET: Employee/Create
public ActionResult Create(){
return View();
}
//POST: Employee/Create
[HttpPost]
public ActionResult Create(Employee emp){
try{
db.Employees.Add(emp);
db.SaveChanges();
return RedirectToAction("Index");
}catch{
return View();
}
}
//GET: Employee/Edit/5
public ActionResult Edit(int id){
var employee = db.Employees.Single(m => m.ID == id);
return View(employee);
}
//POST: Employee/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection){
try{
var employee = db.Employees.Single(m => m.ID == id);
if (TryUpdateModel(employee)){
//To Do:- database code
db.SaveChanges();
return RedirectToAction("Index");
}
return View(employee);
}catch{
return View();
}
}
}
}
次に、このアプリケーションを次のURL http://localhost:63004/Employee で実行します。 次の出力が表示されます。
ビューにデータがないことがわかるように、これはVisual Studioによって作成されたデータベースにレコードを追加していないためです。
SQL Serverオブジェクトエクスプローラーに行きましょう。DBContextクラスにあるのと同じ名前でデータベースが作成されます。
このデータベースを展開すると、Employeeモデルクラスにあるすべてのフィールドを含む1つのテーブルがあることがわかります。
このテーブルのデータを表示するには、Employeesテーブルを右クリックして、View Dataを選択します。
現時点では記録がありません。
次のスクリーンショットに示すように、データベースにいくつかのレコードを直接追加しましょう。
ブラウザを更新すると、データがデータベースからビューに更新されていることがわかります。
[新規作成]リンクをクリックして、ブラウザから1つのレコードを追加しましょう。 作成ビューが表示されます。
次のフィールドにデータを追加しましょう。
[作成]ボタンをクリックすると、インデックスビューが更新され、この新しいレコードがデータベースに追加されます。
次に、SQL Serverオブジェクトエクスプローラーに移動して、データベースを更新します。 Employeesテーブルを右クリックして、[データの表示]メニューオプションを選択します。 レコードがデータベースに追加されていることがわかります。