次の方法で共有


接続文字列の作成と SQL Server LocalDB の使用

作成者: Rick Anderson

Note

このチュートリアルの更新バージョンは、Visual Studio の最新バージョンを使用してこちらから入手できます。 新しいチュートリアルでは ASP.NET Core MVC を使用しており、このチュートリアルに対して多くの改良を加えています。

このチュートリアルでは、ASP.NET Core MVC のコントローラーとビューについて説明します。 Razor Pages は ASP.NET Core の新しい代替手段であり、Web UI の構築をより簡単かつ生産的にするページベースのプログラミング モデルです。 MVC のバージョンの前に、Razor ページのチュートリアルを試すことをお勧めします。 この Razor ページのチュートリアルの特徴は次のとおりです。

  • 使いやすい。
  • 多くの機能をカバーしている。
  • 新しいアプリ開発での最適なアプローチです。

接続文字列の作成と SQL Server LocalDB の使用

作成した MovieDBContext クラスは、データベースへの接続と、Movie オブジェクトのデータベース レコードへのマッピングのタスクを処理ます。 接続するデータベースを指定する方法について疑問をお持ちかもしれません。 どのデータベースを使用するかを実際に指定する必要はありません。Entity Framework は既定で LocalDB を使用します。 このセクションでは、アプリケーションの Web.config ファイルに接続文字列を明示的に追加します。

SQL Server Express LocalDB

LocalDB は、オンデマンドで起動し、ユーザー モードで実行される SQL Server Express データベース エンジンの軽量バージョンです。 LocalDB は SQL Server Express の特別な実行モードで実行され、データベースを .mdf ファイルとして操作できます。 通常、LocalDB データベース ファイルは Web プロジェクトの App_Data フォルダーに保持されます。

SQL Server Express を運用環境の Web アプリケーションで使用することは推奨されません。 特に、LocalDB は IIS で動作するように設計されていないため、Web アプリケーションの運用で使用するべきではありません。 ただし、LocalDB データベースは SQL Server または SQL Azure に簡単に移行できます。

Visual Studio 2017 では、LocalDB は Visual Studio と共に既定でインストールされます。

既定では、Entity Framework はオブジェクト コンテキスト クラスと同じ名前 (このプロジェクトでは MovieDBContext) の接続文字列を検索します。 詳細については、「ASP.NET Web アプリケーション用の SQL Server 接続文字列」を参照してください。

以下に示すアプリケーション ルートの Web.config ファイルを開きます。 (ビュー フォルダーの Web.config ファイルではありません)。

Screenshot that shows the Solution Explorer window and Web dot config is selected and circled in red.

<connectionStrings> 要素を見つけます。

Screenshot that shows code and the connection string element is circled in red.

次の接続文字列を、Web.config ファイルの <connectionStrings> 要素に追加します。

<add name="MovieDBContext" 
   connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" 
   providerName="System.Data.SqlClient" 
/>

次の例は、新しい接続文字列が追加された Web.config ファイルの一部を示しています。

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031.mdf" providerName="System.Data.SqlClient" />
  <add name="MovieDBContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>

この 2 つの接続文字列は非常によく似ています。 最初の接続文字列は DefaultConnection という名前で、誰がアプリケーションにアクセスできるかを制御するためにメンバーシップ データベースで使用されます。 追加した接続文字列は、App_Data フォルダー内にある Movie.mdf という名前の LocalDB データベースを指定します。 このチュートリアルではメンバーシップ データベースを使用しません。メンバーシップ、認証、およびセキュリティの詳細については、チュートリアル「認証と SQL DB を使用して ASP.NET MVC アプリを作成し、Azure App Service にデプロイする」を参照してください。

接続文字列の名前は、DbContext クラスの名前と一致する必要があります。

using System;
using System.Data.Entity;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }

    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
}

MovieDBContext 接続文字列を実際に追加する必要はありません。 接続文字列を指定しない場合、Entity Framework は、DbContext クラスの完全修飾名 (この場合は MvcMovie.Models.MovieDBContext) を持つ LocalDB データベースをユーザー ディレクトリ内に作成します。 データベースには .MDF というサフィックスが付いている限り、任意の名前を付けることができます。 たとえば、データベースに MyFilms.mdf という名前を付けることができます。

次に、ムービー データを表示し、ユーザーが新しいムービー一覧を作成できるようにするための新しい MoviesController クラスを構築します。