トレーニング
モジュール
EF Core を使ってリレーショナル データを永続化および取得する - Training
このモジュールでは、データ アクセス プロジェクトを作成する手順について説明します。 Entity Framework Core (EF Core) を使用して、リレーショナル データベースに接続し、作成、読み取り、更新、削除 (CRUD) クエリを構築します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
この記事では、使用するデータベース接続を Entity Framework が検出する方法と、それを変更する方法について説明します。 Code First と EF デザイナーで作成されたモデルについて説明します。
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
通常、Entity Framework アプリケーションでは、DbContext から派生したクラスが使用されます。 この派生クラスは、基本 DbContext クラスのコンストラクターのいずれかを呼び出して制御します。
次のフラグメントでは、DbContext コンストラクターを使用できるいくつかの方法を示します。
アプリケーションで他の構成を行ったことがない場合、DbContext でパラメーターなしのコンストラクターを呼び出すと、DbContext は、規則によって作成されたデータベース接続を使用して Code First モードで実行されます。 次に例を示します。
namespace Demo.EF
{
public class BloggingContext : DbContext
{
public BloggingContext()
// C# will call base class parameterless constructor by default
{
}
}
}
この例で、DbContext は、派生コンテキスト クラス (Demo.EF.BloggingContext) の名前空間修飾名をデータベース名として使用し、SQL Express または LocalDB のいずれかを使用してこのデータベースの接続文字列を作成します。 両方がインストールされている場合は、SQL Express が使用されます。
Visual Studio 2010 には SQL Express が既定で含まれており、Visual Studio 2012 以降には LocalDB が含まれています。 インストール中、EntityFramework NuGet パッケージによって、使用できるデータベース サーバーが確認されます。 次に、NuGet パッケージにより、規則に従って接続を作成するときに Code First で使用される既定のデータベース サーバーが設定されて、構成ファイルが更新されます。 SQL Express が実行されている場合は、それが使用されます。 SQL Express が使用できない場合は、代わりに LocalDB が既定として登録されます。 既定の接続ファクトリの設定が既に含まれている場合は、構成ファイルに対する変更は行われません。
アプリケーションで他に構成を行っていない場合は、使用するデータベース名を指定して DbContext で文字列コンストラクターを呼び出すと、DbContext は、規則によって作成されたその名前のデータベースへのデータベース接続を使用して、Code First モードで実行されます。 次に例を示します。
public class BloggingContext : DbContext
{
public BloggingContext()
: base("BloggingDatabase")
{
}
}
この例で、DbContext はデータベース名として "BloggingDatabase" を使用し、SQL Express (Visual Studio 2010 でインストールされる) または LocalDB (Visual Studio 2012 でインストールされる) のいずれかを使用して、このデータベースの接続文字列を作成します。 両方がインストールされている場合は、SQL Express が使用されます。
app.config または web.config ファイルに接続文字列を入れることを選択できます。 次に例を示します。
<configuration>
<connectionStrings>
<add name="BloggingCompactDatabase"
providerName="System.Data.SqlServerCe.4.0"
connectionString="Data Source=Blogging.sdf"/>
</connectionStrings>
</configuration>
これは、SQL Express または LocalDB 以外のデータベース サーバーを使用することを DbContext に示す簡単な方法です。上記の例では、SQL Server Compact Edition データベースが指定されています。
接続文字列の名前が (名前空間の修飾の有無に関係なく) コンテキストの名前と一致すると、パラメーターなしのコンストラクターが使用されている場合は DbContext によって検出されます。 接続文字列名がコンテキストの名前と異なる場合は、接続文字列名を DbContext コンストラクターに渡して、Code First モードでこの接続を使用することを DbContext に指示できます。 次に例を示します。
public class BloggingContext : DbContext
{
public BloggingContext()
: base("BloggingCompactDatabase")
{
}
}
または、DbContext コンストラクターに渡される文字列に対して "name=<connection string name>" の形式を使用できます。 次に例を示します。
public class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingCompactDatabase")
{
}
}
この形式により、接続文字列が構成ファイルに含まれることを予期していることが明示的になります。 指定した名前の接続文字列が見つからない場合は、例外がスローされます。
EF Designer を使用して作成されるモデルは、モデルは既に存在しており、アプリケーションの実行時にコードから生成されないという点で、Code First とは異なります。 通常、モデルはプロジェクト内に EDMX ファイルとして存在します。
Designer によって EF 接続文字列が app.config または web.config ファイルに追加されます。 この接続文字列は、EDMX ファイル内での情報の検出方法に関する情報が含まれているという点において特殊です。 次に例を示します。
<configuration>
<connectionStrings>
<add name="Northwind_Entities"
connectionString="metadata=res://*/Northwind.csdl|
res://*/Northwind.ssdl|
res://*/Northwind.msl;
provider=System.Data.SqlClient;
provider connection string=
"Data Source=.\sqlexpress;
Initial Catalog=Northwind;
Integrated Security=True;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
EF Designer では、接続文字列名を DbContext コンストラクターに渡すことで、この接続を使用することを DbContext に示すコードも生成されます。 次に例を示します。
public class NorthwindContext : DbContext
{
public NorthwindContext()
: base("name=Northwind_Entities")
{
}
}
接続文字列は、使用するモデルの詳細情報が含まれた EF 接続文字列なので、DbContext では、(Code First を使用してコードから計算するのではなく) 既存のモデルを読み込むことを認識します。
DbContext クラスには、一部のより高度なシナリオを可能にする他のコンストラクターと使用パターンが含まれています。 それらのツールの一部を紹介します。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
モジュール
EF Core を使ってリレーショナル データを永続化および取得する - Training
このモジュールでは、データ アクセス プロジェクトを作成する手順について説明します。 Entity Framework Core (EF Core) を使用して、リレーショナル データベースに接続し、作成、読み取り、更新、削除 (CRUD) クエリを構築します。
ドキュメント
Entity Framework 6 における構成ファイルの設定
Entity Framework 6 での DbContext の操作
Entity Framework 6 におけるコードベースの構成