.NET Core
.NET Core EntityFramework
DBからモデルを自動生成
VisualStudioのメニューから、ツール > NuGetパッケージマネージャ > パッケージマネージャコンソール の順にクリックしてコンソールを起動。
どのプロジェクトに、モデルの.csファイルを出力するかを選択する。
下記のコマンドを入力すると、自動的にモデルのクラスが作られる。
Scaffold-DbContext "Server=〜" Microsoft.EntityFrameworkCore.SqlServer -OutputDir [フォルダ名]
コマンドの"Server=〜"の箇所は、接続文字列を指定する。入力例は下記の通り。
Scaffold-DbContext "Server=localhost\SQLExpress;initial catalog=〜;persist security info=True;user id=〜;password=〜;MultipleActiveResultSets=True;App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
appsettings.jsonに記載の接続文字列をアプリから読み出す方法
まず、csprojファイルのItemGroupタグ内に以下の記述を追加する。
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
次の下記のコードで、接続文字列の値を読み出す。
IConfigurationBuilder builder = new ConfigurationBuilder();
builder = builder.AddJsonFile("appsettings.json");
IConfiguration config = builder.Build();
string connectionString = config.GetValue<string>("ConnectionStrings:DbEntities");
SQLDataBaseに接続できない場合のチェック
- 各自ローカルの開発環境から、SQLDataBaseに接続できるかチェック。
できない場合は、SQLDatabaseのログイン情報、接続先サーバー名に誤りがないかチェック。
ローカル環境での確認なら、エラー時の詳しいログも取れるので便利。
appsettings.json
ローカル環境とAzureとで接続文字列を切りかえ
Program.csなら、次のロジックで環境変数(WebAppsの構成、appsetting.json)から接続文字列を取得できる。
builder.Configuration.GetConnectionString("[接続文字列名]")
強制的にappsetting.jsonから読み取る場合は、以下のコードを書くとよい。
IConfigurationBuilder builder = new ConfigurationBuilder();
builder = builder.AddJsonFile("appsettings.json");
IConfiguration config = builder.Build();
connectionString = config.GetValue<string>("ConnectionStrings:[接続文字列名]");
appsettings.jsonの記述内容が実行時に反映されない場合の対応
書き換え前のappsettings.jsonの内容がキャッシュされていることがあるため。
開発環境なら、リビルドをすることで、最新のappsettings.jsonの内容に反映することができる。
appsettings.jsonの内容が反映されたりされなかったりする場合がある。
その場合は、appsettings.jsonを改めて保存し、ファイルの最終更新時刻を新しくするとよい。
(最終更新時刻が3年前になっている場合、正しく動いてくれなかったことがある)
|