ADO.NET Entity Framework Core データ プロバイダー
ADO.NET Entity Framework (EF) Core は、クロス プラットフォーム開発をサポートする、.NET 用の軽量で拡張可能なオブジェクト リレーショナル マッパー(O/RM)です。これにより、開発者は .NET オブジェクトを使用してデータベースを操作できるようになり、データ中心のアプリケーションで記述および保守する必要のあるコードの量を減らすことができます。
Zen ADO.NET Entity Framework Core データ プロバイダーは、ADO.NET Entity Framework Core を使用するアプリケーションで使用できます。以下をサポートしています。
•Microsoft ADO.NET Entity Framework Core 3.1
ADO.NET Entity Framework Core データ プロバイダーは、ADO.NET データ プロバイダーを使用して ADO.NET データベース サーバーと通信します。つまり、ADO.NET データ プロバイダーによって定義された機能は、ここで特に断りがない限り、ADO.NET Entity Framework Core データ プロバイダーに適用されるということです。同様に、ADO.NET データ プロバイダーに合わせて作られたすべてのパフォーマンス構成が、ADO.NET Entity Framework Core データ プロバイダーで実現されます。
メモ:Zen ADO.NET Entity Framework Core のアプリケーションを開発する場合は、Visual Studio 2017 以降が必要です。
ADO.NET Entity Framework Core データ プロバイダーについて
ADO.NET Entity Framework Core データ プロバイダーはマネージ コードのみで構築されています。つまり、完全に共通言語ランタイム(CLR)の内部で、実行およびデータベースへの接続が行えます。
クライアント ライブラリや COM コンポーネントなどネイティブ オペレーティング システムで実行するコードはアンマネージ コードと言います。マネージ コードとアンマネージ コードは 1 つのアプリケーション内に混在させることができます。ただし、アンマネージ コードは共通言語ランタイムの外部にまで影響が及ぶため、現実的には複雑になり、パフォーマンスも低下します。また、セキュリティの危険にさらすことにもなりかねません。
名前空間
ADO.NET Entity Framework Core データ プロバイダーの名前空間は、Actian.EntityFrameworkCore.Zen です。
アセンブリ名
Zen ADO.NET Entity Framework Core データ プロバイダーは、Actian.EntityFrameworkCore.Zen.dll という名前のアセンブリを使用します。
これを使用するには、
SDK ダウンロードで入手できる ADO.NET データ プロバイダーに示されているお使いのバージョンの最新 SDK の .zip アーカイブをダウンロードして、NuGet パッケージ Actian.EntityFrameworkCore.Zen を展開します。その後、プロジェクトにパッケージを追加します。
ADO.NET Entity Framework Core データ プロバイダーの構成
►ADO.NET Entity Framework Core データ プロバイダーを構成するには
2 NuGet パッケージ Actian.EntityFrameworkCore.Zen をインストールします。
3 新しいコンテキスト クラスをアプリケーションに追加し、次のコードを使用して OnConfiguring メソッドをオーバーライドします。
public class MyContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseZen(connection string);
}
Zen ADO.NET Entity Framework Core データ プロバイダーでの接続文字列の使用
Zen ADO.NET Entity Framework Core データ プロバイダーは接続文字列に含まれている情報を使用して、基となる Entity Framework Core をサポートする ADO.NET データ プロバイダーに接続します。
接続文字列オプションのデフォルト値の変更
ADO.NET Entity Framework Core データ プロバイダーで使用される接続文字列オプションのデフォルト値の多くは、Zen ADO.NET データ プロバイダーで使用されるデフォルト値と同じです(詳細については、表
35 を参照してください)。表
21 は、ADO.NET Entity Framework Core アプリケーションで接続文字列オプションを使用する場合には、違うデフォルト値になるオプションを示しています。
Code First のサポート
Entity Framework Core は Code First の機能をサポートしています。これらの機能のサポートを実装すると、長い識別子名の処理に必要な変更など、データ プロバイダーへの変更が必要になります。ただし、アプリケーションの変更は必要ありません。
Code First の実装は型マッピングの変更を必要とします。詳細については、
Code First の型マッピングを参照してください。
長い識別子名の処理
ほとんどの Zen 識別子の最大長は 20 バイトです。サーバー上で作成するオブジェクトの名前はクラス名とプロパティ名から取られるため、識別子名がこのサイズを超える場合があります。また、制約名は多くの場合、いくつかのオブジェクト名を連結して作成されます。このような場合には、識別子の最大長を超える可能性がさらに大きくなります。
列の場合、データ プロバイダーは識別子の末尾をチルダ文字 ~ に置き換えることにより、識別子をデータベースで許容される識別子の最大長に短縮します。たとえば、文字列 ColumnMoreThanTwentyCharacters は ColumnMoreThanTwent~ に短縮されます。
テーブルの場合、データ プロバイダーは識別子の末尾を整数のハッシュ コードに置き換えることにより、識別子をデータベースで許容される識別子の最大長に短縮します。たとえば、文字列 ATableWithAVeryLongTableName は ATableWit_1738385675 に短縮されます。
DB ツールを使用して DB オブジェクトのアクセスや表示を行った場合、作成されたテーブルの名前が、モデル クラス名とプロパティ名から予想される名前とは異なる場合があります。
ADO.NET Entity Framework Core での Code First Migrations の使用
Entity Framework Core では Code First Migrations をサポートしています。これにより、データベースを削除して再作成しなくても、データベース スキーマを更新することでモデル クラスを反映できるようになります。
移行は、モデルの変更に従って、データベース スキーマを増分で更新できるようにします。データベースに対する各変更セットは、移行として知られるコード ファイルで表されます。移行は、通常、タイムスタンプを使用して管理され、データベース内のテーブルは、どの移行がデータベースに適用されたかを追跡します。
Code First Migrations は型マッピングの変更を必要とします。詳細については、
Code First の型マッピングを参照してください。
Code First Migrations を実装するには、Zen ADO.NET Entity Framework Core データ プロバイダーを構成した時点で、次の NuGet パッケージをインストールします。
Microsoft.EntityFrameworkCore.Tools(バージョン 3.1)
リバース エンジニアリングの使用(スキャフォールディング)
データベース スキーマに基づいてエンティティ型クラスおよび DbContext クラスをスキャフォールディングする処理は、リバース エンジニアリングと呼ばれます。これは、EF Core パッケージ マネージャー コンソール(PMC)の Scaffold-DbContext コマンド、または .NET コマンド ライン インターフェイス(CLI)の dotnet ef dbcontext scaffold コマンドを使用して実行できます。
ADO.NET Actian Zen Entity Framework Core データ プロバイダーでリバース エンジニアリングを使用するには、データ プロバイダーを構成した後、次の手順を実行します。
1 NuGet パッケージ Microsoft.EntityFrameworkCore.Tools(バージョン 3.1)をインストールします。
2 次の Scaffold-DbContext PowerShell コマンドを実行します。
Scaffold-DbContext 'connection string' Actian.EntityFrameworkCore.Zen
必要に応じて、
Scaffold-DbContext PowerShell コマンドにパラメーターを追加することができます。詳細については、
https://docs.microsoft.com/ja-jp/ef/core/managing-schemas/scaffolding?tabs=vs を参照してください。
Code First の型マッピング
CLR 型から Code First モデルの Actian Zen データ型へのマッピングは、モデル中心の型マッピングを示しています。このマッピングでは、CLR 型は、データベースの作成時に使用される Zen(ストア)型に影響を与えます。一部の CLR 型はいくつかの異なる Zen 型にマップすることができます。
列は次のように定義されています。
•[CLR 型]列は、共通言語ランタイムの型名を示しています。
•[型マッピングに影響を与えるプロパティ値]列は、型マッピングに影響を及ぼす可能性のある、あらゆるプロパティ値を示しています。
•[Zen 型]列は、ネイティブな型名を示しています。
表 22 CLR 型から Code First モデルの Actian Zen データ型へのマッピング
CLR 型 | 型マッピングに影響を与えるプロパティ値 | Actian Zen データ型 |
---|
Boolean | | BIT |
Byte | | UTINYINT |
Byte[ ] | | BINARY |
| |
DateTime | | AUTOTIMESTAMP |
| DATE |
| TIMESTAMP |
| |
DateTimeOffset | | DATETIME |
Decimal | | CURRENCY |
| |
| NUMERIC |
| NUMERICSA |
| NUMERICSTS |
| UBIGINT |
Double | | BFLOAT8 |
| |
Float | | |
| REAL |
| BFLOAT4 |
Guid | | UNIQUEIDENTIFIER |
Integer | | |
| IDENTITY |
| USMALLINT |
Long | | |
| BIGIDENTITY |
| UINTEGER |
SByte | | TINYINT |
Short | | |
| SMALLIDENTITY |
String | | |
| Unicode=False | LONGVARCHAR |
| MaxLength= (1<=n<=8000) Fixed Length=False Unicode=True | NVARCHAR |
| MaxLength= (1<=n<=8000) Fixed Length=False Unicode=False | VARCHAR |
| MaxLength= (1<=n<=8000) Fixed Length=True Unicode=True | NCHAR |
| MaxLength= (1<=n<=8000) Fixed Length=True Unicode=False | CHAR |
TimeSpan | | TIME |
|
EDM 正規関数から Zen 関数へのマッピング
ADO.NET Entity Framework Core は、エンティティ データ モデル(EDM)正規関数を Zen ADO.NET Entity Framework Core データ プロバイダーの対応するデータ ソース機能に変換します。これによって、全データ ソースに共通する形式で表現される関数を呼び出すことができます。
これらの正規関数はデータ ソースから独立しているため、正規関数の引数の型と戻り値の型は、EDM の型の語句で定義されます。Entity SQL クエリで正規関数を使用すると、データ ソースで適切な関数が呼び出されます。
すべての正規関数には、ヌルが入力された場合の動作とエラー状況が明示的に指定されています。ただし、ADO.NET Entity Framework Core はこの動作を実行しません。
集計正規関数
表
23 は、EDM 集計正規関数から Zen 関数へのマッピング、およびこれらの関数が適用される CLR 型を示します。
表 23 集計正規関数のマッピング
集計正規関数 | Actian Zen 関数 | CLR 型 |
---|
BigCount(expression) | COUNT_BIG(expression) | Long |
Count(expression) | COUNT(expression) | Integer |
数学正規関数
表
24 は、EDM 数学正規関数から Zen 関数へのマッピング、およびこれらの関数が適用される CLR 型を示します。
表 24 数学正規関数のマッピング
数学正規関数 | Actian Zen 関数 | CLR 型 |
---|
Abs(expression) | ABS(expression) | Decimal、Double、Float、Int、Long、SByte、Short |
Ceiling(expression) | CEILING(expression) | Decimal、Double |
Floor(expression) | FLOOR(expression) | Decimal、Double |
Pow(base, power) | POWER(base, power) | Double |
Exp(expression) | EXP(expression) | Double |
Log10(expression) | LOG10(expression) | Double |
Log(expression) | LOG(expression) | Double |
Sqrt(expression) | SQRT(expression) | Double |
Acos(expression) | ACOS(expression) | Double |
Asin(expression) | ASIN(expression) | Double |
Atan(expression) | ATAN(expression) | Double |
Atan2(expression1, expression2) | ATAN2(expression1, expression2) | Double |
Cos(expression) | COS(expression) | Double |
Sin(expression) | SIN(expression) | Double |
Tan(expression) | TAN(expression) | Double |
Sign(expression) | SIGN(expression) | Decimal、Double、Float、Int、Long、SByte、Short |
日付と時刻の正規関数
表
25 は、EDM の日付と時刻の正規関数から Zen 関数へのマッピングを示します。これらの関数は、日付時刻データを使用する型の生成、処理、および操作を行います。また、この表はこれらの関数が適用される CLR 型も示しています。
表 25 日付と時刻の正規関数のマッピング
日付と時刻の正規関数 | Actian Zen 関数 | CLR 型 |
---|
DateTime.Now | SYSDATETIME() | DateTime |
DateTime.Now | SYSDATETIMEOFFSET() | DateTimeOffset |
DateTime.UtcNow | SYSUTCDATETIME() | DateTime DateTimeOffset |
DateTime.Today | CURDATE() | DateTime DateTimeOffset |
AddYears(expression) | DATEADD(year, expression, column) | DateTime DateTimeOffset |
AddMonths(expression) | DATEADD(month, expression, column) | DateTime DateTimeOffset |
AddDays(expression) | DATEADD(day, expression, column) | DateTime DateTimeOffset |
AddHours(expression) | DATEADD(hour, expression, column) | DateTime DateTimeOffset |
AddMinutes(expression) | DATEADD(minute, expression, column) | DateTime DateTimeOffset |
AddSeconds(expression) | DATEADD(second, expression, column) | DateTime DateTimeOffset |
AddMilliSeconds(expression) | DATEADD(millisecond, expression, column) | DateTime DateTimeOffset |
EF.Functions.DateDiffYear(column, expression) | DATEDIFF(year, column, expression) | DateTime DateTimeOffset |
EF.Functions.DateDiffMonth(column, expression) | DATEDIFF(month, column, expression) | DateTime DateTimeOffset |
EF.Functions.DateDiffDay(column, expression) | DATEDIFF(day, column, expression) | DateTime DateTimeOffset |
EF.Functions.DateDiffHour(column, expression) | DATEDIFF(hour, column, expression) | DateTime DateTimeOffset TimeSpan |
EF.Functions.DateDiffMinute(column, expression) | DATEDIFF(minute, column, expression) | DateTime DateTimeOffset TimeSpan |
EF.Functions.DateDiffSecond(column, expression) | DATEDIFF(second, column, expression) | DateTime DateTimeOffset TimeSpan |
EF.Functions.DateDiffMilliSecond(column, expression) | DATEDIFF(millisecond, column, expression) | DateTime DateTimeOffset TimeSpan |
文字列正規関数
表
27 は、EDM 文字列正規関数から Zen 関数へのマッピング、およびこれらの関数が適用される CLR 型を示します。
表 26 文字列正規関数のマッピング
文字列正規関数 | Actian Zen 関数 | CLR 型 |
---|
IndexOf(expression) | POSITION(expression, column) | String |
Replace(toReplace, replaceWith) | REPLACE(toReplace, column, replaceWith) | String |
ToLower() | LOWER(column) | String |
ToUpper() | UPPER(column) | String |
SubString(start, length) | SUBSTRING(column, start, length) | String |
IsNullOrWhiteSpace() | 列の LTRIM および RTRIM と、ヌル チェックの組み合わせ | String |
TrimStart() | LTRIM(column) | String |
TrimEnd() | RTRIM(column) | String |
TRIM() | 列の LTRIM と RTRIM の組み合わせ | String |
Contains(expression) | POSITION(expression, column) | String |
StartsWith(expression) | 列の LEFT と LENGTH の組み合わせ | String |
EndsWith(expression) | 列の RIGHT と LENGTH の組み合わせ | String |
Length() | LENGTH(column) | String |
EF.Functions.Position(column, expression) | POSITION(expression, column) | String |
その他の正規関数
表
27 は、その他の正規関数から Zen 関数へのマッピング、およびこれらの関数が適用される CLR 型を示します。
表 27 その他の正規関数のマッピング
正規関数 | Actian Zen 関数 | CLR 型 |
---|
ToString() | CONVERT(column, SQL_CHAR) | すべての型 |
NewGuid() | NEWID() | Guid |
メモ:column は関数が適用されるプロパティです。
Entity Framework 機能の拡張
ADO.NET Entity Framework Core および Actian Zen Entity Framework Core データ プロバイダーは、簡単に拡張できるように設計されています。以下の例は、Entity Framework Core を拡張する方法を示しています。
ADO.NET Entity Framework Core でのストアド プロシージャの使用
Entity Framework Core では、raw SQL クエリを使用してストアド プロシージャを拡張することができます。詳細については、
https://docs.microsoft.com/ja-jp/ef/core/querying/raw-sql を参照してください。
Entity Framework 6.x から Entity Framework Core へのアプリケーションのアップグレード
アプリケーションを Entity Framework 6.x から Entity Framework Core にアップグレードするには、
https://docs.microsoft.com/ja-jp/ef/efcore-and-ef6/porting/ を参照してください。
制限事項
Actian Zen ADO.NET Entity Framework Core データ プロバイダーには以下の制限事項があります。
•Actian Zen Entity Framework Core データ プロバイダーは、リバース エンジニアリング(スキャフォールディング)の同時実行機能をサポートしていません。
詳細情報
ADO.NET および Entity Framework Core の追加情報については、以下を参照してください。
•機能の比較では、Entity Framework Core と Entity Framework 6.X で使用できる機能を比較しています。
ASP.NET Core は、ASP.NET Core Razor Pages アプリでの Entity Framework Core の使用方法を示しています。