MVCフレームワーク-モデル

コンポーネント「モデル」は、アプリケーションのデータを管理する役割を果たします。ビューからの要求に応答し、コントローラーからの指示にも応答して自身を更新します。

モデルクラスは、手動で作成することも、データベースエンティティから生成することもできます。次の章では、モデルを手動で作成するための多くの例を紹介します。したがって、この章では、他のオプション、つまりデータベースから生成して、両方の方法を実際に体験できるようにします。

データベースエンティティを作成する

SQL Serverに接続し、新しいデータベースを作成します。

次に、次のクエリを実行して新しいテーブルを作成します。

CREATE TABLE [dbo].[Student]( 
   [StudentID]      INT           IDENTITY (1,1) NOT NULL, 
   [LastName]       NVARCHAR (50) NULL, 
   [FirstName]      NVARCHAR (50) NULL, 
   [EnrollmentDate] DATETIME      NULL, 
   PRIMARY KEY CLUSTERED ([StudentID] ASC) 
)  

CREATE TABLE [dbo].[Course]( 
   [CourseID] INT           IDENTITY (1,1) NOT NULL, 
   [Title]    NVARCHAR (50) NULL, 
   [Credits]  INT           NULL, 
   PRIMARY KEY CLUSTERED ([CourseID] ASC) 
)  

CREATE TABLE [dbo].[Enrollment]( 
   [EnrollmentID] INT IDENTITY (1,1) NOT NULL, 
   [Grade]        DECIMAL(3,2) NULL, 
   [CourseID]     INT NOT NULL, 
   [StudentID]    INT NOT NULL, 
   PRIMARY KEY CLUSTERED ([EnrollmentID] ASC), 
      CONSTRAINT [FK_dbo.Enrollment_dbo.Course_CourseID] FOREIGN KEY ([CourseID]) 
   REFERENCES [dbo].[Course]([CourseID]) ON DELETE CASCADE, 
      CONSTRAINT [FK_dbo.Enrollment_dbo.Student_StudentID] FOREIGN KEY ([StudentID]) 
   REFERENCES [dbo].[Student]([StudentID]) ON DELETE CASCADE 
)

データベースエンティティを使用してモデルを生成する

データベースを作成してテーブルを設定したら、先に進んで新しいMVC空のアプリケーションを作成できます。プロジェクトのModelsフォルダーを右クリックし、「追加」→「新規アイテム」を選択します。次に、[ADO.NETエンティティデータモデル]を選択します。

次のウィザードで、[データベースから生成]を選択し、[次へ]をクリックします。SQLデータベースへの接続を設定します。

データベースを選択し、[接続のテスト]をクリックします。次のような画面が表示されます。[次へ]をクリックします。

テーブル、ビュー、およびストアドプロシージャと関数を選択します。[完了]をクリックします。次のスクリーンショットに示すように作成されたモデルビューが表示されます。

上記の操作により、すべてのデータベースエンティティのモデルファイルが自動的に作成されます。たとえば、作成したStudentテーブルは、次のコードを持つモデルファイルStudent.csになります。

namespace MvcModelExample.Models { 
   using System; 
   using System.Collections.Generic; 
     
   public partial class Student { 
      
      public Student() { 
         this.Enrollments = new HashSet(); 
      } 
     
      public int StudentID { get; set; } 
      public string LastName { get; set; } 
      public string FirstName { get; set; } 
      public Nullable EnrollmentDate { get; set; } 
      public virtual ICollection Enrollments { get; set; } 
   } 
}