EF Core 1.0 に含まれる機能

プラットフォーム

.NET Framework 4.5.1

コンソール、WPF、WinForms、ASP.NET 4 などが含まれます。

.NET Standard 1.3

.NET Framework と、Windows、OSX および Linux での .NET Core の両方を対象にした ASP.NET Core が含まれています。

モデリング

基本モデリング

共通のスカラー型 (intstring など) の get/set プロパティを持つ POCO エンティティに基づいています。

リレーションシップとナビゲーション プロパティ

外部キーに基づく一対多、一対ゼロまたは一対一のリレーションシップをモデルに指定できます。 単純なコレクションまたは参照型のナビゲーション プロパティを、これらのリレーションシップに関連付けることができます。

組み込みの規約

組み込みの規約は、エンティティ クラスの構造に基づいて、初期モデルを作成します。

Fluent API

使用するコンテキストの OnModelCreating メソッドをオーバーライドして、規約によって検出されたモデルをさらに構成できます。

データの注釈

エンティティのクラスやプロパティに追加できる属性で、EF モデルに影響を与えます。 たとえば [Required] を追加すると、プロパティが必須であることが EF に通知されます。

リレーショナル テーブルのマッピング

エンティティをテーブルや列にマップできます。

キー値の生成

クライアント側での生成と、データベースでの生成が含まれます。

データベースで生成される値

データベースでの挿入 (既定値) や更新 (計算列) によって値を生成できます。

SQL Server 内のシーケンス

モデルにシーケンス オブジェクトを定義できます。

UNIQUE 制約

代替キーを定義し、そのキーを対象とするリレーションシップを定義する機能を利用できます。

インデックス

モデルにインデックスを定義すると、インデックスが自動的にデータベースに導入されます。 一意なインデックスもサポートされています。

シャドウ状態プロパティ

.NET クラスで宣言されておらず、このクラスに格納もされていないが、EF Core で追跡および更新できるプロパティをモデルに定義できます。 オブジェクト内の外部キー プロパティを公開することが好ましくない場合に、外部キー プロパティの用途でよく使用されます。

Table-per-Hierarchy 継承パターン

データベース内の特定レコードのエンティティの種類を識別する識別子の列を使用して、継承階層内のエンティティを 1 つのテーブルに保存できます。

モデルの検証

モデル内の無効なパターンを検出し、有用なエラー メッセージを示します。

変更追跡

スナップショットによる変更の追跡

現在の状態を元の状態のコピー (スナップショット) と比較することで、エンティティの変更を自動的に検出できます。

通知による変更の追跡

プロパティの値が変更されると、エンティティから変更トラッカーに通知できます。

追跡対象の状態へのアクセス

DbContext.EntryDbContext.ChangeTracker を使用します。

デタッチされたエンティティやグラフのアタッチ

この新しい DbContext.AttachGraph API では、新しいまたは変更されたエンティティを保存するために、コンテキストにエンティティを再アタッチできます。

データの保存

基本の保存機能

エンティティ インスタンスへの変更をデータベースに保存できます。

オプティミスティック同時実行

データベースからデータがフェッチされた後、別のユーザーが行った変更が上書きされないようにします。

非同期 SaveChanges

データベースで SaveChanges から発行されたコマンドを処理している間に他の要求を処理できるように、現在のスレッドを解放できます。

データベース トランザクション

SaveChanges が常にアトミックであることを示します。つまり、完全に成功するか、データベースが変更されないかどちらかです。 コンテキスト インスタンスなどの間でトランザクションを共有できる、トランザクションに関連した API もあります。

リレーショナル: ステートメントのバッチ処理

複数の INSERT/UPDATE/DELETE コマンドを 1 度のラウンドトリップでデータベースにバッチ更新することにより、パフォーマンスを向上させます。

クエリ

LINQ の基本的なサポート

LINQ を使用してデータベースからデータを取得する機能を提供します。

混合クライアント/サーバーの評価

データベース内で評価できないためにデータをメモリに取得してから評価する必要のあるロジックをクエリに組み込むことができます。

NoTracking

コンテキストでエンティティ インスタンスへの変更を監視する必要がない場合には、クエリをより速く実行できます (これは結果が読み取り専用である場合に便利です)。

一括読み込み

クエリ実行時にフェッチも必要な関連データを識別する Include および ThenInclude メソッドを提供します。

非同期クエリ

データベースでクエリを処理している間に他の要求を処理できるように、現在のスレッド (とそれに関連するリソース) を解放できます。

生 SQL クエリ

生 SQL クエリを使用してデータをフェッチする DbSet.FromSql メソッドを提供します。 これらのクエリは、LINQ を使用して構成することもできます。

データベース スキーマの管理

データベース作成/削除 API

これらの API の大半は、データベースを移行せずにすばやく作成または削除する必要のあるテスト向けに設計されています。

リレーショナル データベースの移行

リレーショナル データベース スキーマを、モデルの変化に合わせて長期間かけて進化させることができます。

データベースからのリバース エンジニアリング

既存のリレーショナル データベース スキーマに基づいて、EF モデルをスキャフォールディングします。

データベース プロバイダー

SQL Server

Microsoft SQL Server 2008 以降に接続します。

SQLite

SQLite 3 データベースに接続します。

インメモリ

実際のデータベースに接続せずに簡単にテストできるように設計されています。

サード パーティ プロバイダー

他のデータベース エンジンで使用できるプロバイダーもあります。 すべてのプロバイダーの一覧については、「Database Providers (データベース プロバイダー)」をご覧ください。