5.3 DatabaseFacade拡張メソッド
ODP.NET EF Coreには、追加の拡張メソッド、およびDatabaseFacadeクラスのメソッドのデフォルト動作に対する変更が含まれています。
DatabaseFacade.EnsureCreated
このプロパティによって、現在のコンテキストに定義されたスキーマの表が存在することが保証されます。
宣言
// C# public static bool EnsureCreated()
戻り値
bool
備考
スキーマ内にいずれかの表が存在する場合は、何も処理が実行されません。既存の表は、EF Coreコンテキスト・モデルとの互換性がチェックされません。
スキーマ内に表が存在しない場合は、すべての定義済コンテキスト・モデル・オブジェクトが作成されます。
接続文字列に指定されたユーザー/スキーマが存在しない場合は、エラーがスローされ、ユーザー/スキーマを作成する処理は実行されません。管理者は、このメソッドを使用する前に、ユーザー/スキーマを作成して、適切な権限を割り当てる必要があります。
コンテキストに定義されたすべてのオブジェクトが作成される場合、戻り値はtrueです。スキーマにいずれかの表がすでに存在する場合は、falseです。
例外
存在しないユーザー/スキーマが接続文字列で指定された場合は、NotSupportedException()がスローされます。
型: NotSupportedException()
メッセージ: 必要なユーザーが存在しないか、指定されたユーザー名/パスワードが無効です
DatabaseFacade.EnsureCreated(string[])
このプロパティによって、文字列配列内の指定されたスキーマの表が存在することが保証されます。
宣言
// C# public static bool EnsureCreated (string[] schemas)
パラメータ
schemas– EF Coreコンテキストの既存の表をチェックするスキーマのリスト。スキーマ名は大/小文字が区別されます。
戻り値
bool
備考
文字列配列スキーマ・リスト内にいずれかの表が存在する場合は、何も処理が実行されません。既存の表は、EF Coreコンテキスト・モデルとの互換性がチェックされません。
文字列配列スキーマ・リスト内に表が存在しない場合は、すべての定義済コンテキスト・モデル・オブジェクトが作成されます。
接続文字列に指定されたユーザー/スキーマが存在しない場合は、エラーがスローされ、ユーザー/スキーマを作成する処理は実行されません。管理者は、このメソッドを使用する前に、ユーザー/スキーマを作成して、適切な権限を割り当てる必要があります。
このメソッドに渡されたスキーマに、接続文字列に指定されたユーザー/スキーマが含まれない場合、そのスキーマは暗黙的にスキーマの配列に追加されます。
スキーマの配列がNULLまたは長さ0 (ゼロ)の場合は、DatabaseFacade.EnsureCreated() APIがコールされます。
コンテキストに定義されたすべてのオブジェクトが作成される場合、戻り値はtrueです。スキーマにいずれかの表がすでに存在する場合は、falseです。
例外
存在しないユーザー/スキーマが接続文字列で指定された場合は、NotSupportedException()がスローされます。
型: NotSupportedException()
メッセージ: 必要なユーザーが存在しないか、指定されたユーザー名/パスワードが無効です
サンプル・コード
using (var db = DbContext())
{
db.Database.EnsureCreated(new string[]{"SCOTT", "HR", "EFUser"});
db.Database.SaveChanges();
}DatabaseFacade.EnsureDeleted
このプロパティによって、スキーマ・ユーザーの作成したオブジェクトがすべて削除されることが保証されます。
宣言
// C# public static bool EnsureDeleted()
戻り値
bool
備考
EF Coreコンテキスト・モデル・オブジェクトが存在しない場合は、何も処理が実行されません。オブジェクトが存在する場合、Oracleデータ・ディクショナリ・オブジェクトを除いて、すべてのユーザー/スキーマ・オブジェクトが削除されます。
警告: 削除されたオブジェクトには、EF Coreコンテキスト・モデル以外のスキーマ・オブジェクトが含まれます(ユーザー/スキーマにこれらのオブジェクトを削除する権限がある場合)。
現在のコンテキストで定義されたスキーマが存在しない場合は、何も処理が実行されません。
現在のコンテキストでスキーマに関連するユーザー作成オブジェクトをすべて削除しようとする場合、戻り値はtrueです。接続文字列に指定されたスキーマが存在しない場合は、falseです。
DatabaseFacade.EnsureDeleted(string[])
このプロパティによって、文字列配列内の指定されたスキーマのユーザー/スキーマ・オブジェクトが削除されることが保証されます。
宣言
// C# public static bool EnsureCreated (string[] schemas)
パラメータ
schemas– ユーザー生成オブジェクトを削除するスキーマのリスト。スキーマ名は大/小文字が区別されます。
戻り値
bool
備考
オブジェクトが存在する場合、Oracleデータ・ディクショナリ・オブジェクトを除いて、すべてのユーザー/スキーマ・オブジェクトが削除されます。EF Coreコンテキスト・モデル・オブジェクトが存在しない場合は、何も処理が実行されません。
警告: 削除されたオブジェクトには、EF Coreコンテキスト・モデル以外のスキーマ・オブジェクトが含まれます(ユーザー/スキーマにこれらのオブジェクトを削除する権限がある場合)。
指定されたスキーマが存在しない場合は、何も処理が実行されません。
指定されたスキーマ内でユーザーが権限を持つユーザー作成オブジェクトをすべて削除しようとする場合、戻り値はtrueです。接続文字列に指定されたスキーマが存在しない場合は、falseです。
サンプル・コード
using (var db = DbContext())
{
db.Database.EnsureDeleted(new string[]{"SCOTT", "HR", "EFUser"});
db.Database.SaveChanges();
}