Asp.net-mvc-databases

提供:Dev Guides
移動先:案内検索

ASP.NET MVC-データベース

このチュートリアルで作成したすべてのASP.NET MVCアプリケーションでは、ハードコードされたデータをコントローラーからViewテンプレートに渡しました。 ただし、実際のWebアプリケーションを構築するには、実際のデータベースを使用することをお勧めします。 この章では、アプリケーションに必要なデータを保存および取得するためにデータベースエンジンを使用する方法について説明します。

データを保存および取得するには、Entity Frameworkと呼ばれる.NET Frameworkデータアクセステクノロジを使用して、モデルを定義および操作します。

Entity Framework(EF)はCode Firstテクニックをサポートします。これにより、単純なクラスを記述することでモデルオブジェクトを作成でき、クラスからその場でデータベースが作成されるため、非常にクリーンで迅速な開発ワークフローが可能になります。

簡単な例を見てみましょう。この例では、Entityフレームワークのサポートを追加します。

  • ステップ1 *-Entity Frameworkをインストールするには、プロジェクトを右クリックし、NuGetパッケージマネージャー→ソリューション用のNuGetパッケージの管理…​を選択します。

Entity Frameworkのインストール

*NuGet Package Manager* が開きます。 検索ボックスでエンティティフレームワークを検索します。

Search Entity Framework

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; }
   }
}

上記のように、 EmpDBContextDbContext として知られる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 で実行します。 次の出力が表示されます。

Name JoiningDate Age

ビューにデータがないことがわかるように、これはVisual Studioによって作成されたデータベースにレコードを追加していないためです。

SQL Serverオブジェクトエクスプローラーに行きましょう。DBContextクラスにあるのと同じ名前でデータベースが作成されます。

DBContextクラス

このデータベースを展開すると、Employeeモデルクラスにあるすべてのフィールドを含む1つのテーブルがあることがわかります。

従業員モデルクラス

このテーブルのデータを表示するには、Employeesテーブルを右クリックして、View Dataを選択します。

従業員テーブルビューデータ

現時点では記録がありません。

レコードがない瞬間

次のスクリーンショットに示すように、データベースにいくつかのレコードを直接追加しましょう。

データベースにレコードを追加

ブラウザを更新すると、データがデータベースからビューに更新されていることがわかります。

更新されたビュー

[新規作成]リンクをクリックして、ブラウザから1つのレコードを追加しましょう。 作成ビューが表示されます。

ビューの作成

次のフィールドにデータを追加しましょう。

データの追加

[作成]ボタンをクリックすると、インデックスビューが更新され、この新しいレコードがデータベースに追加されます。

新しいレコードデータベース

次に、SQL Serverオブジェクトエクスプローラーに移動して、データベースを更新します。 Employeesテーブルを右クリックして、[データの表示]メニューオプションを選択します。 レコードがデータベースに追加されていることがわかります。

データベースに追加されたレコード