Oracle で DB ファースト

July 6, 2025 6:6

手順

  1. NuGet から Microsoft.EntityFrameworkCore.Tools パッケージをインストール
  2. NuGet からOracle.EntityFrameworkCore パッケージをインストール
  3. スタートアッププロジェクトが Model を生成するプロジェクトとは異なる場合、スタートアッププロジェクトに Microsoft.EntityFrameworkCore.Design パッケージをインストール
  4. パッケージマネージャーコンソールで Scaffold-DbContext を実行
Scaffold-DbContext "DATA SOURCE=oracle12c/orcl;PERSIST SECURITY INFO=True;User Id=hoge;Password=fuga;" "Oracle.EntityFrameworkCore" -OutputDir "Models" -ContextDir "Data" -Context "DefaultDbContext" -UseDatabaseNames -DataAnnotations -Force
  • OutputDir:モデルクラスを作成するフォルダ
  • ContextDir:DbContext を作成するフォルダ
  • UseDatabaseNames:データベースのテーブル名、物理名をそのまま使用する
Scaffold-DbContext "DATA SOURCE=oracle12c/orcl;PERSIST SECURITY INFO=True;User Id=hoge;Password=fuga;" "Oracle.EntityFrameworkCore" -OutputDir "Models" -ContextDir "Data" -Context "DefaultDbContext" -UseDatabaseNames -Force
  • Context:DbContext のクラス名
  • DataAnnotations:属性を使用してモデルを構成
  • Force:既存のファイルを上書き
Scaffold-DbContext "name=DefaultConnection" "Oracle.EntityFrameworkCore" -OutputDir "./../BCMSHandy.Common/Models" -ContextDir "./../BCMSHandy.DataAccess" -Context "DefaultDbContext" -UseDatabaseNames -Tables 集荷受付データ,生産者マスタ,項目マスタ,日齢単価マスタ -Force -NoPluralize -Namespace "BCMSHandy.Common.Models" -ContextNamespace "BCMSHandy.DataAccess"
  • Namespace:モデルクラスの namespace
  • ContextNamespace:DbContext の namespace

特定のテーブルを指定する場合

Scaffold-DbContext "DATA SOURCE=oracle12c/orcl;PERSIST SECURITY INFO=True;User Id=hoge;Password=fuga;" "Oracle.EntityFrameworkCore" -OutputDir "Models" -ContextDir "Data" -Context "DefaultDbContext" -UseDatabaseNames -Tables WWTMPWKA,WWTMPWKB

ConnectionString の使用

  • name=接続文字列名
  • NoPluralize 複数形のプロパティ名を生成しない
  • OutputDir 相対パス指定で別プロジェクトのフォルダにも出力できる
Scaffold-DbContext "name=DefaultConnection" "Oracle.EntityFrameworkCore" -OutputDir "./../SilverLifeThermometer.Common/Models" -ContextDir "./" -Context "DefaultDbContext" -UseDatabaseNames -Tables TANMTA,DEVICEMTA -Force -NoPluralize

参考

https://docs.microsoft.com/ja-jp/ef/core/cli/powershell#scaffold-dbcontext
https://www.devart.com/dotconnect/sqlite/docs/EFCore-Database-First-NET-Core.html
https://stackoverflow.com/questions/48282223/scaffold-dbcontext-to-different-output-folder
https://stackoverflow.com/questions/46934893/how-to-prevent-entity-framework-core-2-0-from-renaming-tables-and-columns-in-gen