Oracle で DB ファースト
2025年7月6日 15時6分手順
- NuGet から Microsoft.EntityFrameworkCore.Tools パッケージをインストール
- NuGet からOracle.EntityFrameworkCore パッケージをインストール
- スタートアッププロジェクトが Model を生成するプロジェクトとは異なる場合、スタートアッププロジェクトに Microsoft.EntityFrameworkCore.Design パッケージをインストール
- パッケージマネージャーコンソールで 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