開発者リファレンス : データ アクセス方法 : Data Provider for .NET : ADO.NET Entity Framework Core データ プロバイダー
 
このページをシェアする                  
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
.Net Standard 2.1 でサポートされるすべてのプラットフォーム。詳細については、https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard を参照してください。
Microsoft Entity Framework Core および Actian Zen データベースの両方でサポートされるすべての機能。詳細については、https://docs.microsoft.com/ja-jp/ef/core/what-is-new/ を参照してください。
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 データ プロバイダーを構成するには
1 .Net Standard 2.1 を対象とするアプリケーションを作成します。詳細については、https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard を参照してください。
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 アプリケーションで接続文字列オプションを使用する場合には、違うデフォルト値になるオプションを示しています。
 
表 21 ADO.NET Entity Framework Core アプリケーションで使用される接続文字列オプションのデフォルト値
接続文字列オプション
ADO.NET Entity Framework Core アプリケーションでのデフォルト値
Parameter Mode
サポートされません。
Statement Cache Mode
ExplicitOnly 値のみサポートされます。
DB File Directory Path
Environment.SpecialFolder.CommonApplicationData。Environment.SpecialFolder 列挙型およびサポートされるフィールドの詳細については、https://docs.microsoft.com/ja-jp/dotnet/api/system.environment.specialfolder?view=netcore-3.1 を参照してください。
Code First のサポート
Entity Framework Core は Code First の機能をサポートしています。これらの機能のサポートを実装すると、長い識別子名の処理に必要な変更など、データ プロバイダーへの変更が必要になります。ただし、アプリケーションの変更は必要ありません。
Code First の実装は型マッピングの変更を必要とします。詳細については、Code First の型マッピングを参照してください。
長い識別子名の処理
ほとんどの Zen 識別子の最大長は 20 バイトです。サーバー上で作成するオブジェクトの名前はクラス名とプロパティ名から取られるため、識別子名がこのサイズを超える場合があります。また、制約名は多くの場合、いくつかのオブジェクト名を連結して作成されます。このような場合には、識別子の最大長を超える可能性がさらに大きくなります。
列の場合、データ プロバイダーは識別子の末尾をチルダ文字 ~ に置き換えることにより、識別子をデータベースで許容される識別子の最大長に短縮します。たとえば、文字列 ColumnMoreThanTwentyCharactersColumnMoreThanTwent~ に短縮されます。
テーブルの場合、データ プロバイダーは識別子の末尾を整数のハッシュ コードに置き換えることにより、識別子をデータベースで許容される識別子の最大長に短縮します。たとえば、文字列 ATableWithAVeryLongTableNameATableWit_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 を参照してください。
.Net Core CLI 環境でリバース エンジニアリングを使用する場合は、https://docs.microsoft.com/en-in/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli を参照してください。
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
 
LONGVARBINARY1
DateTime
 
AUTOTIMESTAMP
 
DATE
 
TIMESTAMP
 
TIMESTAMP22
DateTimeOffset
 
DATETIME
Decimal
 
CURRENCY
 
DECIMAL2
 
NUMERIC
 
NUMERICSA
 
NUMERICSTS
 
UBIGINT
Double
 
BFLOAT8
 
DOUBLE2
Float
 
FLOAT2
 
REAL
 
BFLOAT4
Guid
 
UNIQUEIDENTIFIER
Integer
 
INTEGER2
 
IDENTITY
 
USMALLINT
Long
 
BIGINT2
 
BIGIDENTITY
 
UINTEGER
SByte
 
TINYINT
Short
 
SMALLINT2
 
SMALLIDENTITY
String
 
NLONGVARCHAR2
 
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
1. MaxLength に値が指定されていない場合は、この型にマップされます。
2. デフォルトでは、この型にマップされます。
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 を拡張する方法を示しています。
https://docs.microsoft.com/ja-jp/ef/core/managing-schemas/migrations/history-table
https://docs.microsoft.com/ja-jp/ef/core/modeling/dynamic-model
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 データ プロバイダーには以下の制限事項があります。
Entity Framework Core には、リバース エンジニアリング(スキャフォールディング)に関連するいくつかの制限があります。それらはすべて、Actian Zen Entity Framework Core データ プロバイダーにも同様に適用されます。これらの制限の詳細については、https://docs.microsoft.com/ja-jp/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli を参照してください。
Actian Zen Entity Framework Core データ プロバイダーは、リバース エンジニアリング(スキャフォールディング)の同時実行機能をサポートしていません。
詳細情報
ADO.NET および Entity Framework Core の追加情報については、以下を参照してください。
ADO.NET Entity Framework Core では、Entity Framework Core を紹介するほか、多くの詳細にわたる項目へのリンクを提供しています。
機能の比較では、Entity Framework Core と Entity Framework 6.X で使用できる機能を比較しています。
ASP.NET Core は、ASP.NET Core Razor Pages アプリでの Entity Framework Core の使用方法を示しています。