新しいデータベースを使用した .NET Core コンソール アプリでの EF Core の概要Getting Started with EF Core on .NET Core Console App with a New database

このチュートリアルでは、Entity Framework Core を使用して SQLite データベースに対してデータ アクセスを実行する .NET Core コンソール アプリを作成します。In this tutorial, you create a .NET Core console app that performs data access against a SQLite database using Entity Framework Core. 移行を使用して、モデルからデータベースを作成します。You use migrations to create the database from the model. ASP.NET Core MVC を使用する Visual Studio バージョンについては ASP.NET Core - 新しいデータベースに関する記事をご覧ください。See ASP.NET Core - New database for a Visual Studio version using ASP.NET Core MVC.

この記事のサンプルは GitHub で確認してくださいView this article's sample on GitHub.

必須コンポーネントPrerequisites

新しいプロジェクトを作成するCreate a new project

  • 新しいコンソール プロジェクトを作成します。Create a new console project:

    dotnet new console -o ConsoleApp.SQLite
    

現在のディレクトリを変更するChange the current directory

以降の手順では、アプリケーションに対して dotnet コマンドを発行する必要があります。In subsequent steps, we need to issue dotnet commands against the application.

  • 現在のディレクトリを、次のようにアプリケーションのディレクトリに変更します。We change the current directory to the application's directory like this:

    cd ConsoleApp.SQLite/
    

Entity Framework Core をインストールするInstall Entity Framework Core

EF Core を使用するには、対象となるデータベース プロバイダーのパッケージをインストールします。To use EF Core, install the package for the database provider(s) you want to target. このチュートリアルでは SQLite を使用します。This walkthrough uses SQLite. 使用可能なプロバイダーの一覧については、「Database Providers (データベース プロバイダー)」をご覧ください。For a list of available providers see Database Providers.

  • Microsoft.EntityFrameworkCore.Sqlite と Microsoft.EntityFrameworkCore.Design をインストールします。Install Microsoft.EntityFrameworkCore.Sqlite and Microsoft.EntityFrameworkCore.Design

    dotnet add package Microsoft.EntityFrameworkCore.Sqlite
    dotnet add package Microsoft.EntityFrameworkCore.Design
    
  • dotnet restore を実行して新しいパッケージをインストールします。Run dotnet restore to install the new packages.

モデルを作成するCreate the model

モデルを構成するコンテキストとエンティティ クラスを定義します。Define a context and entity classes that make up your model.

  • 次の内容が含まれる新しい Model.cs ファイルを作成します。Create a new Model.cs file with the following contents.

    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;
    
    namespace ConsoleApp.SQLite
    {
        public class BloggingContext : DbContext
        {
            public DbSet<Blog> Blogs { get; set; }
            public DbSet<Post> Posts { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlite("Data Source=blogging.db");
            }
        }
    
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public ICollection<Post> Posts { get; set; }
        }
    
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    

ヒント :実際のアプリケーションでは、クラスはそれぞれ別々のファイルに記述し、接続文字列は構成ファイルまたは環境変数に記述します。Tip: In a real application, you put each class in a separate file and put the connection string in a configuration file or environment variable. チュートリアルをわかりやすくするために、すべてを 1 つのファイルに記述しています。To keep the tutorial simple, everything is contained in one file.

データベースの作成Create the database

モデルを作成したら、移行を利用してデータベースを作成します。Once you have a model, you use migrations to create a database.

  • dotnet ef migrations add InitialCreate を実行して移行をスキャフォールディングし、モデルの最初のテーブル セットを作成します。Run dotnet ef migrations add InitialCreate to scaffold a migration and create the initial set of tables for the model.
  • dotnet ef database update を実行して、新しい移行をデータベースに適用します。Run dotnet ef database update to apply the new migration to the database. このコマンドは、移行を適用する前に、データベースを作成します。This command creates the database before applying migrations.

blogging.db SQLite DB はプロジェクト ディレクトリにあります。The blogging.db SQLite DB is in the project directory.

モデルを使用するUse the model

  • Program.cs を開き、内容を次のコードに置き換えます。Open Program.cs and replace the contents with the following code:

    using System;
    
    namespace ConsoleApp.SQLite
    {
        public class Program
        {
            public static void Main()
            {
                using (var db = new BloggingContext())
                {
                    db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
                    var count = db.SaveChanges();
                    Console.WriteLine("{0} records saved to database", count);
    
                    Console.WriteLine();
                    Console.WriteLine("All blogs in database:");
                    foreach (var blog in db.Blogs)
                    {
                        Console.WriteLine(" - {0}", blog.Url);
                    }
                }
            }
        }
    }
    
  • コンソールからアプリをテストします。Test the app from the console. Visual Studio からアプリを実行するには、Visual Studio のメモに関するページを参照してください。See the Visual Studio note to run the app from Visual Studio.

    dotnet run

    1 つのブログがデータベースに保存され、すべてのブログの詳細がコンソールに表示されます。One blog is saved to the database and the details of all blogs are displayed in the console.

    ConsoleApp.SQLite>dotnet run
    1 records saved to database
    
    All blogs in database:
    - http://blogs.msdn.com/adonet
    

モデルを変更するChanging the model:

  • モデルに変更を加える場合は、dotnet ef migrations add コマンドを使用して、新しい移行をスキャフォールディングすることができます。If you make changes to the model, you can use the dotnet ef migrations add command to scaffold a new migration. スキャフォールディング コードの確認 (および必要な変更) を行ったら、dotnet ef database update コマンドを使用してデータベースにスキーマの変更を適用できます。Once you have checked the scaffolded code (and made any required changes), you can use the dotnet ef database update command to apply the schema changes to the database.
  • EF Core はデータベース内の __EFMigrationsHistory テーブルを使用して、どの移行がデータベースに既に適用されているかを追跡します。EF Core uses a __EFMigrationsHistory table in the database to keep track of which migrations have already been applied to the database.
  • SQLite データベース エンジンでは、他のほとんどのリレーショナル データベースでサポートされているスキーマ変更のうち特定のものがサポートされていません。The SQLite database engine doesn't support certain schema changes that are supported by most other relational databases. たとえば、DropColumn 操作はサポートされていません。For example, the DropColumn operation is not supported. EF Core の移行では、そのような操作のためのコードが作成されます。EF Core Migrations will generate code for these operations. しかし、それらをデータベースに適用しようとしたりスクリプトの作成を試みたりすると、EF Core によって例外がスローされます。But if you try to apply them to a database or generate a script, EF Core throws exceptions. SQLite の制限に関する記事をご覧ください。See SQLite Limitations. 新しい開発の場合は、モデルを変更するときの移行を使用するのではなく、データベースを削除して新たに作成することを検討してください。For new development, consider dropping the database and creating a new one rather than using migrations when the model changes.

Visual Studio から実行するRun from Visual Studio

Visual Studio からこのサンプルを実行するには、作業ディレクトリをプロジェクトのルートに設定する必要があります。To run this sample from Visual Studio, you must set the working directory manually to be the root of the project. 作業ディレクトリを設定しない場合、SQLite Error 1: 'no such table: Blogs'Microsoft.Data.Sqlite.SqliteException がスローされます。If you don't set the working directory, the following Microsoft.Data.Sqlite.SqliteException is thrown: SQLite Error 1: 'no such table: Blogs'.

作業ディレクトリを設定するには:To set the working directory:

  • ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] を選択します。In Solution Explorer, right click the project and then select Properties.
  • 左ウィンドウの [デバッグ] タブを選択します。Select the Debug tab in the left pane.
  • 作業ディレクトリをプロジェクトのディレクトリに設定します。Set Working directory to the project directory.
  • 変更を保存します。Save the changes.

その他のリソースAdditional Resources