ITエンジニア向け 情報館  
   

 

.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年前になっている場合、正しく動いてくれなかったことがある)