ASP.NET Core MVC と Visual Studio (10 の 1) を使用して Entity Framework Core の概要Getting started with ASP.NET Core MVC and Entity Framework Core using Visual Studio (1 of 10)

によってTom DykstraRick AndersonBy Tom Dykstra and Rick Anderson

Contoso 大学でサンプル web アプリケーションでは、Entity Framework (EF) コア 2.0 と Visual Studio 2017 を使用して ASP.NET Core 2.0 MVC web アプリケーションを作成する方法を示します。The Contoso University sample web application demonstrates how to create ASP.NET Core 2.0 MVC web applications using Entity Framework (EF) Core 2.0 and Visual Studio 2017.

サンプル アプリケーションは、架空の Contoso 大学の web サイトです。The sample application is a web site for a fictional Contoso University. 学生受付、コースの作成、およびインストラクター割り当てなどの機能が含まれています。It includes functionality such as student admission, course creation, and instructor assignments. これは、最初の一連の最初から Contoso 大学サンプル アプリケーションをビルドする方法を説明するチュートリアルです。This is the first in a series of tutorials that explain how to build the Contoso University sample application from scratch.

ダウンロードまたは完成したアプリケーションを表示します。Download or view the completed application.

EF の最新バージョンであるが EF のすべての機能がない、EF コア 2.0 6.x です。EF Core 2.0 is the latest version of EF but does not yet have all the features of EF 6.x. EF との間を選択する方法については 6.x と EF コアを参照してください。 EF コア vs です。EF6.xです。For information about how to choose between EF 6.x and EF Core, see EF Core vs. EF6.x. EF を選択した場合、6.x を参照してくださいこのチュートリアル シリーズの以前のバージョンします。If you choose EF 6.x, see the previous version of this tutorial series.

注意

必須コンポーネントPrerequisites

以下をインストールします。Install the following:

トラブルシューティングTroubleshooting

問題を解決できない場合に発生した場合、コードを比較することでのソリューションを見つけることは通常、完成したプロジェクトです。If you run into a problem you can't resolve, you can generally find the solution by comparing your code to the completed project. 一般的なエラーとそれらを解決する方法の一覧は、次を参照してください。系列の最後のチュートリアルの「トラブルシューティングです。For a list of common errors and how to solve them, see the Troubleshooting section of the last tutorial in the series. 必要なものがない場合は、StackOverflow.com に質問を投稿することができますASP.NET CoreまたはEF コアです。If you don't find what you need there, you can post a question to StackOverflow.com for ASP.NET Core or EF Core.

ヒント

これは、一連の 10 のチュートリアルでは、それぞれは、前のチュートリアルの処理に基づいています。This is a series of 10 tutorials, each of which builds on what is done in earlier tutorials. 各チュートリアルが正常に完了した後、プロジェクトのコピーを保存することを検討してください。Consider saving a copy of the project after each successful tutorial completion. 問題に遭遇した場合は、前のチュートリアルの一連の先頭に戻るとではなく、経由で開始できます。Then if you run into problems, you can start over from the previous tutorial instead of going back to the beginning of the whole series.

Contoso 大学 web アプリケーションThe Contoso University web application

これらのチュートリアルで構築するアプリケーションは、単純な大学 web サイトです。The application you'll be building in these tutorials is a simple university web site.

ユーザーでは、表示でき、学生、コース、インストラクターの情報を更新することができます。Users can view and update student, course, and instructor information. ここでは、いくつかの画面を作成します。Here are a few of the screens you'll create.

インデックス ページの受講者

受講者の編集 ページ

このサイトの UI スタイルを維持して組み込みのテンプレートによって生成されたものに近いチュートリアルは、Entity Framework を使用する方法の主に集中することです。The UI style of this site has been kept close to what's generated by the built-in templates, so that the tutorial can focus mainly on how to use the Entity Framework.

ASP.NET Core MVC web アプリケーションを作成します。Create an ASP.NET Core MVC web application

Visual Studio を開き、新しい ASP.NET Core c# web という名前のプロジェクト"ContosoUniversity"を作成します。Open Visual Studio and create a new ASP.NET Core C# web project named "ContosoUniversity".

  • ファイルメニューの 新規 > プロジェクトです。From the File menu, select New > Project.

  • 左側のウィンドウから次のように選択します。インストール > Visual c# > Webです。From the left pane, select Installed > Visual C# > Web.

  • 選択、 ASP.NET Core Web アプリケーションプロジェクト テンプレート。Select the ASP.NET Core Web Application project template.

  • 入力ContosoUniversityクリックと名前としてOKです。Enter ContosoUniversity as the name and click OK.

    [新しいプロジェクト] ダイアログ

  • 待って、新しい ASP.NET Core Web アプリケーション (.NET Core)ダイアログを表示するにはWait for the New ASP.NET Core Web Application (.NET Core) dialog to appear

  • 選択ASP.NET Core 2.0Web アプリケーション (モデル-ビュー-コント ローラー)テンプレート。Select ASP.NET Core 2.0 and the Web Application (Model-View-Controller) template.

    注:このチュートリアルでは、ASP.NET Core 2.0 と EF コア 2.0 以降--、以下のことを確認が必要ですASP.NET Core 1.1が選択されていません。Note: This tutorial requires ASP.NET Core 2.0 and EF Core 2.0 or later -- make sure that ASP.NET Core 1.1 is not selected.

  • 確認認証に設定されている認証なしです。Make sure Authentication is set to No Authentication.

  • [OK] をクリックします。 *Click *OK

    [新しい ASP.NET プロジェクト] ダイアログ

サイトのスタイルを設定します。Set up the site style

いくつかの簡単な変更は、[サイト] メニューのレイアウト、およびホーム ページを設定します。A few simple changes will set up the site menu, layout, and home page.

開いているViews/Shared/_Layout.cshtml次の変更を加えます。Open Views/Shared/_Layout.cshtml and make the following changes:

  • 「Contoso 大学」を"ContosoUniversity"の各出現する位置を変更します。Change each occurrence of "ContosoUniversity" to "Contoso University". 次の 3 つの出現があります。There are three occurrences.

  • メニュー エントリを追加受講者コース講習においてインストラクター、および部門、および削除、 にお問い合わせくださいメニュー エントリです。Add menu entries for Students, Courses, Instructors, and Departments, and delete the Contact menu entry.

変更が強調表示されます。The changes are highlighted.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - Contoso University</title>

    <environment names="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment names="Staging,Production">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
    
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Contoso University</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
                    <li><a asp-area="" asp-controller="Students" asp-action="Index">Students</a></li>
                    <li><a asp-area="" asp-controller="Courses" asp-action="Index">Courses</a></li>
                    <li><a asp-area="" asp-controller="Instructors" asp-action="Index">Instructors</a></li>
                    <li><a asp-area="" asp-controller="Departments" asp-action="Index">Departments</a></li>
                </ul>
            </div>
        </div>
    </nav>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2017 - Contoso University</p>
        </footer>
    </div>

    <environment names="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    <environment names="Staging,Production">
        <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery"
                crossorigin="anonymous"
                integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
        </script>
        <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
                asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
                crossorigin="anonymous"
                integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
        </script>
        <script src="~/js/site.min.js" asp-append-version="true"></script>
    </environment>

    @RenderSection("Scripts", required: false)
</body>
</html>

Views/Home/Index.cshtmlファイルの内容をこのアプリケーションについてのテキストで ASP.NET と MVC に関するテキストを置き換える次のコードに置き換えます。In Views/Home/Index.cshtml, replace the contents of the file with the following code to replace the text about ASP.NET and MVC with text about this application:

@{
    ViewData["Title"] = "Home Page";
}

<div class="jumbotron">
    <h1>Contoso University</h1>
</div>
<div class="row">
    <div class="col-md-4">
        <h2>Welcome to Contoso University</h2>
        <p>
            Contoso University is a sample application that
            demonstrates how to use Entity Framework Core in an
            ASP.NET Core MVC web application.
        </p>
    </div>
    <div class="col-md-4">
        <h2>Build it from scratch</h2>
        <p>You can build the application by following the steps in a series of tutorials.</p>
        <p><a class="btn btn-default" href="https://docs.asp.net/en/latest/data/ef-mvc/intro.html">See the tutorial &raquo;</a></p>
    </div>
    <div class="col-md-4">
        <h2>Download it</h2>
        <p>You can download the completed project from GitHub.</p>
        <p><a class="btn btn-default" href="https://github.com/aspnet/Docs/tree/master/aspnetcore/data/ef-mvc/intro/samples/cu-final">See project source code &raquo;</a></p>
    </div>
</div>

CTRL + f5 キーを押してプロジェクトを実行または選択デバッグ > デバッグなしで開始 メニューからです。Press CTRL+F5 to run the project or choose Debug > Start Without Debugging from the menu. これらのチュートリアルで作成された、ページのタブで、ホーム ページを参照してください。You see the home page with tabs for the pages you'll create in these tutorials.

Contoso 大学のホーム ページ

Entity Framework Core NuGet パッケージの管理Entity Framework Core NuGet packages

プロジェクトに EF Core のサポートを追加するには、対象となるデータベース プロバイダーをインストールします。To add EF Core support to a project, install the database provider that you want to target. このチュートリアルは、SQL Server を使用し、プロバイダー パッケージMicrosoft.EntityFrameworkCore.SqlServerです。This tutorial uses SQL Server, and the provider package is Microsoft.EntityFrameworkCore.SqlServer. このパッケージに含まれる、 Microsoft.AspNetCore.All metapackage、ためをインストールする必要はありません。This package is included in the Microsoft.AspNetCore.All metapackage, so you don't have to install it.

このパッケージとその依存関係 (Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Relational) EF のランタイム サポートを提供します。This package and its dependencies (Microsoft.EntityFrameworkCore and Microsoft.EntityFrameworkCore.Relational) provide runtime support for EF. ツール パッケージを追加後の「、移行チュートリアルです。You'll add a tooling package later, in the Migrations tutorial.

Entity Framework のコアで利用可能なその他のデータベース プロバイダーについては、次を参照してください。データベース プロバイダーです。For information about other database providers that are available for Entity Framework Core, see Database providers.

データ モデルを作成します。Create the data model

次に、Contoso 大学アプリケーション用にエンティティ クラスを作成します。Next you'll create entity classes for the Contoso University application. 次の 3 つのエンティティを開始します。You'll start with the following three entities.

受講者コース-登録データ モデルのダイアグラム

一対多の関係があるStudentEnrollmentエンティティ、一対多の関係があるとCourseEnrollmentエンティティです。There's a one-to-many relationship between Student and Enrollment entities, and there's a one-to-many relationship between Course and Enrollment entities. つまり、任意の数に、コースの受講者を登録して、コースに受講者に、登録の任意の数を持つことができます。In other words, a student can be enrolled in any number of courses, and a course can have any number of students enrolled in it.

次のセクションでは、これらのエンティティのいずれかのクラスを作成します。In the following sections you'll create a class for each one of these entities.

学生エンティティThe Student entity

学生のエンティティの図

モデルフォルダー、という名前のクラス ファイルを作成するStudent.csテンプレート コードを次のコードに置き換えます。In the Models folder, create a class file named Student.cs and replace the template code with the following code.

using System;
using System.Collections.Generic;

namespace ContosoUniversity.Models
{
    public class Student
    {
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }
}

IDプロパティは、このクラスに対応するデータベース テーブルの主キー列になります。The ID property will become the primary key column of the database table that corresponds to this class. 既定では、Entity Framework では、解釈というプロパティIDまたはclassnameID主キーとして。By default, the Entity Framework interprets a property that's named ID or classnameID as the primary key.

Enrollmentsプロパティは、ナビゲーション プロパティ。The Enrollments property is a navigation property. ナビゲーション プロパティは、このエンティティに関連するその他のエンティティを保持します。Navigation properties hold other entities that are related to this entity. ここで、Enrollmentsのプロパティ、Student entityのすべてを保持する、Enrollmentに関連付けられているエンティティStudentエンティティです。In this case, the Enrollments property of a Student entity will hold all of the Enrollment entities that are related to that Student entity. つまり場合、データベース内の特定の学生行が関連する 2 つ登録行 (その StudentID 外部キー列に、そのスチューデントの主キーの値が含まれている行) をStudentエンティティのEnrollmentsナビゲーション プロパティで、それらが格納されます2 つEnrollmentエンティティです。In other words, if a given Student row in the database has two related Enrollment rows (rows that contain that student's primary key value in their StudentID foreign key column), that Student entity's Enrollments navigation property will contain those two Enrollment entities.

その型が一覧にエントリを追加、削除すると、更新できるなどをする必要があります、ナビゲーション プロパティ (多対多または一対多のリレーションシップ) のように複数のエンティティに保持できる場合ICollection<T>です。If a navigation property can hold multiple entities (as in many-to-many or one-to-many relationships), its type must be a list in which entries can be added, deleted, and updated, such as ICollection<T>. 指定できますICollection<T>またはなど型List<T>またはHashSet<T>です。You can specify ICollection<T> or a type such as List<T> or HashSet<T>. 指定した場合ICollection<T>、EF の作成、HashSet<T>既定のコレクション。If you specify ICollection<T>, EF creates a HashSet<T> collection by default.

登録エンティティThe Enrollment entity

エンティティの登録の図

モデルフォルダー作成Enrollment.csし、既存のコードを次のコードに置き換えます。In the Models folder, create Enrollment.cs and replace the existing code with the following code:

namespace ContosoUniversity.Models
{
    public enum Grade
    {
        A, B, C, D, F
    }

    public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public Grade? Grade { get; set; }

        public Course Course { get; set; }
        public Student Student { get; set; }
    }
}

EnrollmentIDプロパティは、主キーになります。 このエンティティを使用して、classnameIDパターンの代わりにIDで学習したとしてそれ自体で、Studentエンティティです。The EnrollmentID property will be the primary key; this entity uses the classnameID pattern instead of ID by itself as you saw in the Student entity. 通常 1 つパターンを選択し、データ モデル全体で使用するとします。Ordinarily you would choose one pattern and use it throughout your data model. ここでは、いずれかのパターンを使用することができます、バリエーションを示しています。Here, the variation illustrates that you can use either pattern. 後のチュートリアル、classname せず ID を使用して簡単方法、データ モデルで継承の実装が表示されます。In a later tutorial, you'll see how using ID without classname makes it easier to implement inheritance in the data model.

Gradeプロパティは、enumです。The Grade property is an enum. 後に疑問符 ()、Grade型宣言では、ことを示します、Gradeプロパティが null 値を許容します。The question mark after the Grade type declaration indicates that the Grade property is nullable. Null である評価とは異なる、ゼロ グレード--null またはため、評価はまだ割り当てられていません。A grade that's null is different from a zero grade -- null means a grade isn't known or hasn't been assigned yet.

StudentIDプロパティは、foreign key、および対応するナビゲーション プロパティはStudentします。The StudentID property is a foreign key, and the corresponding navigation property is Student. Enrollmentエンティティが 1 つに関連付けられたStudentエンティティ、プロパティは、1 つのみを保持できるようにStudentエンティティ (とは異なり、Student.Enrollmentsナビゲーション プロパティ先ほど見た、複数を格納するEnrollmentエンティティ)。An Enrollment entity is associated with one Student entity, so the property can only hold a single Student entity (unlike the Student.Enrollments navigation property you saw earlier, which can hold multiple Enrollment entities).

CourseIDプロパティは、foreign key、および対応するナビゲーション プロパティはCourseします。The CourseID property is a foreign key, and the corresponding navigation property is Course. Enrollmentエンティティが 1 つに関連付けられたCourseエンティティです。An Enrollment entity is associated with one Course entity.

Entity Framework がという名前が場合に、外部キーのプロパティとしてプロパティを解釈<navigation property name><primary key property name>(たとえば、StudentIDStudent以降のナビゲーション プロパティ、Studentエンティティの主キーがID)。Entity Framework interprets a property as a foreign key property if it's named <navigation property name><primary key property name> (for example, StudentID for the Student navigation property since the Student entity's primary key is ID). 外部キー プロパティは単にも呼ばれます<primary key property name>(たとえば、CourseIDので、Courseエンティティの主キーがCourseID)。Foreign key properties can also be named simply <primary key property name> (for example, CourseID since the Course entity's primary key is CourseID).

Course エンティティThe Course entity

Course エンティティの図

モデルフォルダー作成Course.csし、既存のコードを次のコードに置き換えます。In the Models folder, create Course.cs and replace the existing code with the following code:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace ContosoUniversity.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }

        public ICollection<Enrollment> Enrollments { get; set; }
    }
}

Enrollmentsプロパティは、ナビゲーション プロパティ。The Enrollments property is a navigation property. ACourseエンティティを任意の数に関連付けることができますEnrollmentエンティティです。A Course entity can be related to any number of Enrollment entities.

ここでの詳細について、DatabaseGenerated属性、後のチュートリアルこの系列にします。We'll say more about the DatabaseGenerated attribute in a later tutorial in this series. 基本的には、この属性には、それを生成、データベースのではなく、コースのプライマリ キーを入力することができます。Basically, this attribute lets you enter the primary key for the course rather than having the database generate it.

データベース コンテキストを作成します。Create the Database Context

指定されたデータ モデルの Entity Framework 機能を調整するのメイン クラスは、データベース コンテキスト クラスです。The main class that coordinates Entity Framework functionality for a given data model is the database context class. このクラスは、Microsoft.EntityFrameworkCore.DbContext クラスから派生させて作成します。You create this class by deriving from the Microsoft.EntityFrameworkCore.DbContext class. コードでは、データ モデルのエンティティが含まれているを指定します。In your code you specify which entities are included in the data model. 特定の Entity Framework の動作をカスタマイズすることもできます。You can also customize certain Entity Framework behavior. クラスの名前は、このプロジェクトでSchoolContextです。In this project, the class is named SchoolContext.

プロジェクト フォルダー内には、という名前のフォルダーを作成データです。In the project folder, create a folder named Data.

データという新しいクラス ファイルを作成するフォルダー SchoolContext.cs、テンプレート コードを次のコードに置き換えます。In the Data folder create a new class file named SchoolContext.cs, and replace the template code with the following code:

using ContosoUniversity.Models;
using Microsoft.EntityFrameworkCore;

namespace ContosoUniversity.Data
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }
    }
}

このコードを作成、DbSet各エンティティ セットのプロパティです。This code creates a DbSet property for each entity set. Entity Framework の用語では、エンティティ セットは通常はデータベース テーブルに対応し、エンティティはテーブルの行に対応します。In Entity Framework terminology, an entity set typically corresponds to a database table, and an entity corresponds to a row in the table.

省略した可能性がありますが、DbSet<Enrollment>DbSet<Course>ステートメントと同じように動作します。You could have omitted the DbSet<Enrollment> and DbSet<Course> statements and it would work the same. Entity Framework はそれらを含める暗黙的に、Studentエンティティ参照、EnrollmentエンティティとEnrollmentエンティティ参照、Courseエンティティです。The Entity Framework would include them implicitly because the Student entity references the Enrollment entity and the Enrollment entity references the Course entity.

データベースが作成される、EF 作成と同じ名前を持つテーブルをDbSetプロパティの名前。When the database is created, EF creates tables that have names the same as the DbSet property names. コレクションのプロパティ名は、通常 (受講者ではなく学生)、複数形が開発者と異なるかどうかテーブル名をする複数化か。Property names for collections are typically plural (Students rather than Student), but developers disagree about whether table names should be pluralized or not. これらのチュートリアル DbContext で単数形のテーブル名を指定して既定の動作をオーバーライドします。For these tutorials you'll override the default behavior by specifying singular table names in the DbContext. 実行するには、DbSet の最後のプロパティの後に、次の強調表示されたコードを追加します。To do that, add the following highlighted code after the last DbSet property.

using ContosoUniversity.Models;
using Microsoft.EntityFrameworkCore;

namespace ContosoUniversity.Data
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Course>().ToTable("Course");
            modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
            modelBuilder.Entity<Student>().ToTable("Student");
        }
    }
}

依存関係の挿入をコンテキストに登録します。Register the context with dependency injection

ASP.NET Core を実装する依存性の注入既定です。ASP.NET Core implements dependency injection by default. EF データベース コンテキストで) などのサービスは、アプリケーションの起動時に依存関係の挿入に登録されます。Services (such as the EF database context) are registered with dependency injection during application startup. これらのサービス (など、MVC コント ローラー) を必要とするコンポーネントは、コンス トラクターのパラメーターを使用してこれらのサービスに提供されます。Components that require these services (such as MVC controllers) are provided these services via constructor parameters. このチュートリアルで後ほどコンテキストのインスタンスを取得するコント ローラーのコンス トラクター コードが表示されます。You'll see the controller constructor code that gets a context instance later in this tutorial.

登録するSchoolContextをサービスとして開くStartup.csを強調表示された行を追加し、ConfigureServicesメソッドです。To register SchoolContext as a service, open Startup.cs, and add the highlighted lines to the ConfigureServices method.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<SchoolContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddMvc();
}

接続文字列の名前によって渡されるコンテキストでメソッドを呼び出す、DbContextOptionsBuilderオブジェクト。The name of the connection string is passed in to the context by calling a method on a DbContextOptionsBuilder object. ローカルの開発、 ASP.NET Core 構成システムから接続文字列を読み取り、される appsettings.jsonファイル。For local development, the ASP.NET Core configuration system reads the connection string from the appsettings.json file.

追加usingに対してステートメントをContosoUniversity.DataMicrosoft.EntityFrameworkCore名前空間、し、プロジェクトを作成します。Add using statements for ContosoUniversity.Data and Microsoft.EntityFrameworkCore namespaces, and then build the project.

using ContosoUniversity.Data;
using Microsoft.EntityFrameworkCore;

開く、される appsettings.jsonファイルし、次の例に示すように、接続文字列を追加します。Open the appsettings.json file and add a connection string as shown in the following example.

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ContosoUniversity1;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

SQL Server Express LocalDBSQL Server Express LocalDB

接続文字列では、SQL Server LocalDB データベースを指定します。The connection string specifies a SQL Server LocalDB database. LocalDB は、SQL Server Express データベース エンジンの簡易バージョンがあり、アプリケーションの開発では、実稼働環境を使用しないものです。LocalDB is a lightweight version of the SQL Server Express Database Engine and is intended for application development, not production use. LocalDB は要求時に開始され、ユーザー モードで実行されるため、複雑な構成はありません。LocalDB starts on demand and runs in user mode, so there is no complex configuration. 既定では、LocalDB が作成されます.mdfデータベース内のファイル、C:/Users/<user>ディレクトリ。By default, LocalDB creates .mdf database files in the C:/Users/<user> directory.

データベースにテスト データを初期化するコードを追加します。Add code to initialize the database with test data

Entity Framework を空のデータベースに作成されます。The Entity Framework will create an empty database for you. このセクションで、テスト データを設定するために、データベースが作成された後に呼び出されるメソッドを記述します。In this section, you write a method that is called after the database is created in order to populate it with test data.

ここで使用する、EnsureCreatedメソッドを自動的にデータベースを作成します。Here you'll use the EnsureCreated method to automatically create the database. 後のチュートリアルを削除して、データベースを再作成ではなく、データベース スキーマを変更する Code First Migrations を使用してモデルの変更を処理する方法について説明します。In a later tutorial you'll see how to handle model changes by using Code First Migrations to change the database schema instead of dropping and re-creating the database.

データフォルダー、という名前の新しいクラス ファイルを作成するDbInitializer.csにより必要な時に作成されるデータベースの次のコードで、テンプレート コードを置き換えるし、ロード テストを新しいデータデータベースです。In the Data folder, create a new class file named DbInitializer.cs and replace the template code with the following code, which causes a database to be created when needed and loads test data into the new database.

using ContosoUniversity.Models;
using System;
using System.Linq;

namespace ContosoUniversity.Data
{
    public static class DbInitializer
    {
        public static void Initialize(SchoolContext context)
        {
            context.Database.EnsureCreated();

            // Look for any students.
            if (context.Students.Any())
            {
                return;   // DB has been seeded
            }

            var students = new Student[]
            {
            new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
            new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
            new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
            };
            foreach (Student s in students)
            {
                context.Students.Add(s);
            }
            context.SaveChanges();

            var courses = new Course[]
            {
            new Course{CourseID=1050,Title="Chemistry",Credits=3},
            new Course{CourseID=4022,Title="Microeconomics",Credits=3},
            new Course{CourseID=4041,Title="Macroeconomics",Credits=3},
            new Course{CourseID=1045,Title="Calculus",Credits=4},
            new Course{CourseID=3141,Title="Trigonometry",Credits=4},
            new Course{CourseID=2021,Title="Composition",Credits=3},
            new Course{CourseID=2042,Title="Literature",Credits=4}
            };
            foreach (Course c in courses)
            {
                context.Courses.Add(c);
            }
            context.SaveChanges();

            var enrollments = new Enrollment[]
            {
            new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A},
            new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C},
            new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B},
            new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B},
            new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F},
            new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F},
            new Enrollment{StudentID=3,CourseID=1050},
            new Enrollment{StudentID=4,CourseID=1050},
            new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F},
            new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C},
            new Enrollment{StudentID=6,CourseID=1045},
            new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A},
            };
            foreach (Enrollment e in enrollments)
            {
                context.Enrollments.Add(e);
            }
            context.SaveChanges();
        }
    }
}

コードは、場合は、データベースが新しいと、テスト データをシード処理する必要がありますいない場合は、想定していますが、データベースの任意の受講者を確認します。The code checks if there are any students in the database, and if not, it assumes the database is new and needs to be seeded with test data. テスト データを配列に読み込むのではなくList<T>パフォーマンスを最適化するコレクション。It loads test data into arrays rather than List<T> collections to optimize performance.

Program.cs、変更、Mainメソッドをアプリケーションの起動時に次の操作します。In Program.cs, modify the Main method to do the following on application startup:

  • 依存関係性の注入コンテナーからのデータベース コンテキストのインスタンスを取得します。Get a database context instance from the dependency injection container.
  • コンテキストを引き渡しシード メソッドを呼び出します。Call the seed method, passing to it the context.
  • Seed メソッドを実行する場合は、コンテキストを破棄します。Dispose the context when the seed method is done.
public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<SchoolContext>();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}

追加usingステートメント。Add using statements:

using Microsoft.Extensions.DependencyInjection;
using ContosoUniversity.Data;

古いチュートリアルは、同様のコードを生じる可能性があります、ConfigureメソッドStartup.csです。In older tutorials, you may see similar code in the Configure method in Startup.cs. 使用することをお勧め、Configureメソッド、要求パイプラインを設定するだけです。We recommend that you use the Configure method only to set up the request pipeline. アプリケーションのスタートアップ コードが属している、Mainメソッドです。Application startup code belongs in the Main method.

今すぐ初めてアプリケーションを実行するデータベースが作成され、テスト データのシード処理します。Now the first time you run the application, the database will be created and seeded with test data. データ モデルを変更するたびには、データベースを削除して、そのシード メソッドを更新して開始した後もう一度新しいデータベースと同じ方法ことができます。Whenever you change your data model, you can delete the database, update your seed method, and start afresh with a new database the same way. 以降のチュートリアルでは、データ モデルの変更、削除して再作成するときに、データベースを変更する方法が表示されます。In later tutorials, you'll see how to modify the database when the data model changes, without deleting and re-creating it.

コント ローラーとビューを作成します。Create a controller and views

次に、ある MVC コント ローラーとクエリおよびデータを保存するのに EF を使用するビューを追加するのに Visual Studio でスキャフォールディング エンジンを使用します。Next, you'll use the scaffolding engine in Visual Studio to add an MVC controller and views that will use EF to query and save data.

CRUD アクション メソッドとビューの自動作成は、スキャフォールディングと呼ばれます。The automatic creation of CRUD action methods and views is known as scaffolding. スキャフォールディングは、スキャフォールディング コードが通常生成されたコードを変更しない一方、独自の要件に合わせて変更できる開始点に、コードの生成とは異なります。Scaffolding differs from code generation in that the scaffolded code is a starting point that you can modify to suit your own requirements, whereas you typically don't modify generated code. 生成されたコードをカスタマイズする必要がある場合は、部分クラスを使用するまたは変更発生時に、コードが再生成します。When you need to customize generated code, you use partial classes or you regenerate the code when things change.

  • 右クリックし、コント ローラーフォルダーソリューション エクスプ ローラー選択追加 > スキャフォールディングされた新しい項目です。Right-click the Controllers folder in Solution Explorer and select Add > New Scaffolded Item.

  • [MVC 依存関係の追加] ダイアログで、[最小の依存関係][追加] の順に選択します。In the Add MVC Dependencies dialog, select Minimal Dependencies, and select Add.

    依存関係を追加します。

    Visual Studio では、コント ローラーをスキャフォールディングするために必要な依存関係を追加します。Visual Studio adds the dependencies needed to scaffold a controller. プロジェクト ファイル内の唯一の違いは、の追加、Microsoft.VisualStudio.Web.CodeGeneration.Designパッケージです。The only change in the project file is the addition of the Microsoft.VisualStudio.Web.CodeGeneration.Design package.

    A ScaffoldingReadMe.txtファイルが作成、削除可能です。A ScaffoldingReadMe.txt file is created which you can delete.

  • もう一度右クリックし、コント ローラーフォルダーソリューション エクスプ ローラー選択追加 > スキャフォールディングされた新しい項目です。Once again, right-click the Controllers folder in Solution Explorer and select Add > New Scaffolded Item.

  • 追加 Scaffold ダイアログ ボックス。In the Add Scaffold dialog box:

    • 選択Entity Framework を使用して、ビューがある MVC コント ローラーです。Select MVC controller with views, using Entity Framework.

    • [追加]をクリックします。Click Add.

  • コント ローラーの追加 ダイアログ ボックス。In the Add Controller dialog box:

    • モデル クラス選択学生です。In Model class select Student.

    • データ コンテキスト クラス選択SchoolContextです。In Data context class select SchoolContext.

    • 既定値を受け入れるStudentsController名として。Accept the default StudentsController as the name.

    • [追加]をクリックします。Click Add.

    Scaffold 受講者

    クリックすると、追加、Visual Studio のスキャフォールディング エンジンを作成、 StudentsController.csファイルと、一連のビュー (.cshtmlファイル)、コント ローラーで動作します。When you click Add, the Visual Studio scaffolding engine creates a StudentsController.cs file and a set of views (.cshtml files) that work with the controller.

(スキャフォールディング エンジンも、データベース コンテキストを作成手動で作成しない場合はこのチュートリアルの前に行ったようにまずします。(The scaffolding engine can also create the database context for you if you don't create it manually first as you did earlier for this tutorial. 新しいコンテキスト クラスを指定することができます、コント ローラーの追加の右側にあるプラス記号をクリックしてボックスデータ コンテキスト クラスです。You can specify a new context class in the Add Controller box by clicking the plus sign to the right of Data context class. Visual Studio は作成し、DbContextコント ローラーとビューだけでなくクラスです)。Visual Studio will then create your DbContext class as well as the controller and views.)

コント ローラーを取ることがわかります、SchoolContextコンス トラクターのパラメーターとして。You'll notice that the controller takes a SchoolContext as a constructor parameter.

namespace ContosoUniversity.Controllers
{
    public class StudentsController : Controller
    {
        private readonly SchoolContext _context;

        public StudentsController(SchoolContext context)
        {
            _context = context;
        }

ASP.NET の依存関係の挿入のインスタンスを渡す場合の注意SchoolContextコント ローラーにします。ASP.NET dependency injection will take care of passing an instance of SchoolContext into the controller. 構成されている、 Startup.cs前ファイルします。You configured that in the Startup.cs file earlier.

コント ローラーが含まれています、Indexアクション メソッドは、データベース内のすべての受講者を表示します。The controller contains an Index action method, which displays all students in the database. メソッドは、受講者のエンティティを読み取ってセットから受講者の一覧を取得、Studentsデータベース コンテキストのインスタンスのプロパティ。The method gets a list of students from the Students entity set by reading the Students property of the database context instance:

public async Task<IActionResult> Index()
{
    return View(await _context.Students.ToListAsync());
}

このコードで非同期のプログラミング要素は、このチュートリアルで後ほどについて説明します。You'll learn about the asynchronous programming elements in this code later in the tutorial.

Views/Students/Index.cshtmlビューは、テーブルのこの一覧を表示します。The Views/Students/Index.cshtml view displays this list in a table:

@model IEnumerable<ContosoUniversity.Models.Student>

@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>

<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
                <th>
                    @Html.DisplayNameFor(model => model.LastName)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.FirstMidName)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.EnrollmentDate)
                </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstMidName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.EnrollmentDate)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.ID">Edit</a> |
                <a asp-action="Details" asp-route-id="@item.ID">Details</a> |
                <a asp-action="Delete" asp-route-id="@item.ID">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>

CTRL + f5 キーを押してプロジェクトを実行または選択デバッグ > デバッグなしで開始 メニューからです。Press CTRL+F5 to run the project or choose Debug > Start Without Debugging from the menu.

テスト データを表示する、受講者タブをクリックする、DbInitializer.Initializeメソッドを挿入します。Click the Students tab to see the test data that the DbInitializer.Initialize method inserted. どの幅の狭い、ブラウザー ウィンドウがによってが表示されます、Studentページの上部にあるタブ リンクは、リンクを表示する右上隅で、ナビゲーション アイコンをクリックする必要があります。Depending on how narrow your browser window is, you'll see the Student tab link at the top of the page or you'll have to click the navigation icon in the upper right corner to see the link.

Contoso 大学のホーム ページの幅の狭い

インデックス ページの受講者

データベースを表示します。View the Database

アプリケーションを起動したときに、DbInitializer.Initializeメソッド呼び出しEnsureCreatedです。When you started the application, the DbInitializer.Initialize method calls EnsureCreated. EF データベースがありませんでした。 そのために作成され、1 つの残りの部分の説明、Initializeメソッドのコードには、データベースにデータが設定されます。EF saw that there was no database and so it created one, then the remainder of the Initialize method code populated the database with data. 使用することができますSQL Server オブジェクト エクスプ ローラー Visual Studio でデータベースを表示するには、(SSOX)。You can use SQL Server Object Explorer (SSOX) to view the database in Visual Studio.

ブラウザーを閉じます。Close the browser.

SSOX ウィンドウが開いていない場合を選択してから、ビュー Visual Studio のメニュー。If the SSOX window isn't already open, select it from the View menu in Visual Studio.

SSOX、クリックして(localdb) \MSSQLLocalDB > データベース、内の接続文字列に含まれるデータベース名のエントリをクリックして、される appsettings.jsonファイル。In SSOX, click (localdb)\MSSQLLocalDB > Databases, and then click the entry for the database name that is in the connection string in your appsettings.json file.

展開して、テーブルノードをデータベース内のテーブルを参照してください。Expand the Tables node to see the tables in your database.

SSOX 内のテーブル

右クリックし、学生テーブルし、をクリックしてビュー データに作成された列とテーブルに挿入された行を参照してください。Right-click the Student table and click View Data to see the columns that were created and the rows that were inserted into the table.

SSOX で student テーブル

.Mdf.ldfデータベース ファイルは、 C:\Users<yourusername >フォルダーです。The .mdf and .ldf database files are in the C:\Users<yourusername> folder.

呼び出しているためEnsureCreatedアプリの起動で実行されている初期化メソッドででした今すぐ変更を行うにはStudentクラス、データベースを削除して、もう一度、アプリケーションを実行し、するとデータベースに自動的に変更内容を一致するように再作成します。Because you're calling EnsureCreated in the initializer method that runs on app start, you could now make a change to the Student class, delete the database, run the application again, and the database would automatically be re-created to match your change. たとえば、追加する場合、EmailAddressプロパティをStudentクラスが表示されます、新しいEmailAddress再作成されたテーブル内の列です。For example, if you add an EmailAddress property to the Student class, you'll see a new EmailAddress column in the re-created table.

規則Conventions

完全なデータベースを作成できるように、Entity Framework の順序で記述したコードの量は、規則、または Entity Framework は、前提を使用するためは最小限です。The amount of code you had to write in order for the Entity Framework to be able to create a complete database for you is minimal because of the use of conventions, or assumptions that the Entity Framework makes.

  • 名前DbSetプロパティ テーブル名として使用されます。The names of DbSet properties are used as table names. 参照されていないエンティティに対して、DbSetプロパティ、エンティティ クラスの名前テーブル名として使用されます。For entities not referenced by a DbSet property, entity class names are used as table names.

  • エンティティのプロパティ名は、列名に使用されます。Entity property names are used for column names.

  • ID または classnameID という名前はエンティティのプロパティは、主キー プロパティとして認識されます。Entity properties that are named ID or classnameID are recognized as primary key properties.

  • という名前が場合、プロパティが外部キーのプロパティとして解釈されます* * (たとえば、StudentIDStudent以降のナビゲーション プロパティ、Studentエンティティの主キーとはID).A property is interpreted as a foreign key property if it's named (for example, StudentID for the Student navigation property since the Student entity's primary key is ID). 外部キー プロパティは単にも呼ばれます* * (たとえば、EnrollmentIDので、Enrollmentエンティティの主キーがEnrollmentID)。Foreign key properties can also be named simply (for example, EnrollmentID since the Enrollment entity's primary key is EnrollmentID).

従来の動作をオーバーライドできます。Conventional behavior can be overridden. たとえば、このチュートリアルで既に説明したとおり、テーブル名を明示的に指定することができます。For example, you can explicitly specify table names, as you saw earlier in this tutorial. 列名を設定してでわかる foreign key、または主キーとして任意のプロパティを設定し、後のチュートリアルこのシリーズのです。And you can set column names and set any property as primary key or foreign key, as you'll see in a later tutorial in this series.

非同期コードAsynchronous code

非同期プログラミングは、ASP.NET Core と EF コアの既定モードです。Asynchronous programming is the default mode for ASP.NET Core and EF Core.

Web サーバーは、使用可能なスレッド数を限定を持ち、負荷が高い状況でのすべての利用可能なスレッドがありますで使用します。A web server has a limited number of threads available, and in high load situations all of the available threads might be in use. そのような場合は、サーバーは、スレッドが解放されるまで新しい要求を処理できません。When that happens, the server can't process new requests until the threads are freed up. 同期コードはの I/O 完了を待機しているため、実際には、作業の実行されない中に多数のスレッド関連付ける可能性があります。With synchronous code, many threads may be tied up while they aren't actually doing any work because they're waiting for I/O to complete. 非同期コードは、プロセスが完了するには I/O の待機している場合、他の要求を処理するために使用するサーバー用に、スレッドが解放されます。With asynchronous code, when a process is waiting for I/O to complete, its thread is freed up for the server to use for processing other requests. その結果、非同期コード サーバー リソースをより効率的に使用でき、遅延なしのより多くのトラフィックを処理するサーバーが有効になっています。As a result, asynchronous code enables server resources to be used more efficiently, and the server is enabled to handle more traffic without delays.

非同期のコードは、実行時に少量のオーバーヘッドを導入がトラフィックの少ない状況がパフォーマンスの低下はごくわずかであり、中に大量のトラフィックの場合、潜在的なパフォーマンスの向上は大きくします。Asynchronous code does introduce a small amount of overhead at run time, but for low traffic situations the performance hit is negligible, while for high traffic situations, the potential performance improvement is substantial.

次のコードで、asyncキーワード、Task<T>値を返すawaitキーワード、およびToListAsyncメソッドが非同期的に実行するコードを作成します。In the following code, the async keyword, Task<T> return value, await keyword, and ToListAsync method make the code execute asynchronously.

public async Task<IActionResult> Index()
{
    return View(await _context.Students.ToListAsync());
}
  • asyncキーワード、コンパイラはメソッド本体の各部分のコールバックを生成して自動的に作成する、Task<IActionResult>返されるオブジェクト。The async keyword tells the compiler to generate callbacks for parts of the method body and to automatically create the Task<IActionResult> object that is returned.

  • 戻り値の型Task<IActionResult>型の結果で進行中の作業を表すIActionResultです。The return type Task<IActionResult> represents ongoing work with a result of type IActionResult.

  • awaitキーワードによって、コンパイラにメソッドを 2 つの部分に分割します。The await keyword causes the compiler to split the method into two parts. 最初の部分は、非同期的に開始される操作を終了します。The first part ends with the operation that is started asynchronously. 2 番目の部分は、操作が完了したときに呼び出されるコールバック メソッドに配置されます。The second part is put into a callback method that is called when the operation completes.

  • ToListAsync非同期バージョンのToList拡張メソッド。ToListAsync is the asynchronous version of the ToList extension method.

Entity Framework を使用する非同期コードを作成する場合の注意すべき点がいくつか:Some things to be aware of when you are writing asynchronous code that uses the Entity Framework:

  • クエリまたはコマンドのデータベースに送信されるステートメントだけが非同期的に実行されます。Only statements that cause queries or commands to be sent to the database are executed asynchronously. たとえばを含むToListAsyncSingleOrDefaultAsync、およびSaveChangesAsyncです。That includes, for example, ToListAsync, SingleOrDefaultAsync, and SaveChangesAsync. 含まれません、たとえば、だけを変更するステートメント、IQueryableなどvar students = context.Students.Where(s => s.LastName == "Davolio")です。It does not include, for example, statements that just change an IQueryable, such as var students = context.Students.Where(s => s.LastName == "Davolio").

  • EF コンテキストはスレッド セーフではありません: を並列で複数の操作を行うにはしないでください。An EF context is not thread safe: don't try to do multiple operations in parallel. ある非同期 EF メソッドを呼び出すときに、常に使用して、awaitキーワード。When you call any async EF method, always use the await keyword.

  • 非同期コードのパフォーマンスの利点を活用、任意のライブラリのパッケージにあるかどうかを確認する場合、(ページングなど) を使用している、データベースに送信されるクエリを Entity Framework メソッドを呼び出す場合にも非同期を使用します。If you want to take advantage of the performance benefits of async code, make sure that any library packages that you're using (such as for paging), also use async if they call any Entity Framework methods that cause queries to be sent to the database.

.NET における非同期プログラミングの詳細については、次を参照してください。 Async 概要です。For more information about asynchronous programming in .NET, see Async Overview.

概要Summary

保存し、データを表示する、エンティティ フレームワークのコアと SQL Server Express LocalDB を使用する単純なアプリケーションが作成されました。You've now created a simple application that uses the Entity Framework Core and SQL Server Express LocalDB to store and display data. 次のチュートリアルでは基本的な CRUD を実行する方法を学習 (作成、読み取り、更新、削除) 操作です。In the following tutorial, you'll learn how to perform basic CRUD (create, read, update, delete) operations.