Setup DB First JetEntityFrameworkProvider in VS2019
はじめに
Access で EntityFramework を使える JetEntityFrameworkProvider を試しました。
github.com
コードファーストは簡単に使えたのですが、DBファーストでは使えるまでに幾つかの設定が必要だったので忘れる前にまとめます。
- はじめに
- 準備① JetEntityFrameworkProvider
- 準備② レジストリのバックアップ
- 準備③ レジストリキー作成
- 1. Visual Studio を管理者として実行
- 2. install.cmd 編集
- 3. プロジェクトのコンパイル
- 3-1. JetDdexProvider ビルドイベント編集
- 3-3. JetEntityFrameworkProvider ビルドイベント編集
- 3-4. JetDdexProvider, JetEntityFrameworkProvider リビルド
- 3-5. VisualStudio2019 プライベートハイブ読み込み
- 3-6. レジストリ DataProviders, DataSources エクスポート
- 3-7. レジストリ DataProviders, DataSources 編集
- 3-8. レジストリ DataProviders, DataSources インポート
- 3-9. VisualStudio2019 プライベートハイブアンロード
- 4. machine.config に JetEntityFrameworkProvider 追加
- DB First 確認
- 参考資料
準備② レジストリのバックアップ
今回は VisualStudio のレジストリをエクスポートしました。
必要に応じて他のレジストリもエクスポートしておくと安心です。
regedit を実行。
VisualStudio を選択。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio
エクスポートで保存。
準備③ レジストリキー作成
レジストリエディタからVisualStudioにキーを新規作成します。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\
自由に名前を付けて良いのですが今回は OMGITWORKS で作成。
3. プロジェクトのコンパイル
コンパイルするためにビルドイベントの内容を編集します。
使用しているVisualStudioのバージョンによってパスが変わるため
環境に合わせてパスを変えて、コンパイルできるようにします。
3-1. JetDdexProvider ビルドイベント編集
JetDdexProvider のプロパティからビルドイベントを編集。
① ビルド前イベントのコマンドライン
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /u JetEntityFrameworkProvider.dll
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
② ビルド後イベントのコマンドライン
"$(ProjectDir)Install.cmd" /ranu /codebase "$(TargetDir)$(TargetFileName)" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /i "$(TargetDir)JetEntityFrameworkProvider.dll" /f
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
3-3. JetEntityFrameworkProvider ビルドイベント編集
JetEntityFrameworkProvider のプロパティからビルドイベントを編集。
① ビルド前イベントのコマンドライン
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /u "$(TargetName)"
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
② ビルド後イベントのコマンドライン
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /if "$(TargetPath)"
赤下線はVisualStudioのバージョンごとに変わるのでパスを確認して変更します。
3-4. JetDdexProvider, JetEntityFrameworkProvider リビルド
JetDdexProvider
JetEntityFrameworkProvider
正常終了し、出力にエラーメッセージが無ければ成功です。
レジストリエディタからDataProviders, DataSourcesが作成されている事を確認します。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\OMGITWORKS
3-5. VisualStudio2019 プライベートハイブ読み込み
レジストリでは、各種の情報がキー、サブキー、値と階層的に管理されている。
ハイブは、ハードウェア設定やソフトウェア設定、セキュリティ設定など、レジストリに保存される情報のうち、特定分野に関する一連の情報を識別するセクションを意味する。
Insider's Computer Dictionary:ハイブ とは? - @IT
プライベートハイブの編集方法については以下の記事が参考になりました。
Fortunately, you can use regedit.exe to load a private hive. You need to select the HKEY_USERS node, and click the File > Load Hive… menu. You select the privateregistry.bin file, give a name to the hive (I entered “VS2017PrivateRegistry”) and now you can see the 15.0
_Config key populated as usual (note: use File > Unload Hive when done):
VisualStudioのレジストリにJetEntityFrameworkProviderを登録するのですが、2017からプライベートハイブに変わってしまいコンパイルだけで登録出来ないため、手作業で行います。
まずはVisualStudioのレジストリ(プライベートハイブ)を確認。
~\AppData\Local\Microsoft\VisualStudio\
プライベートハイブのフォルダ名 16.0 はVisualStudioのバージョンです。
利用している開発環境のバージョンと一致するフォルダを探してください。
プライベートハイブを編集する前に起動しているVisualStudioを全て終了します。
起動していると以下の警告メッセージが表示されて編集ができません。
レジストリエディタにて HKEY_USER を選択。
レジストリエディタのハイブの読み込みから privateregistry.bin を指定。
キー名を付ける必要があるので分かりやすい名前を付けます。
これによりVisualStudioのプライベートハイブが編集できるようになります。
3-6. レジストリ DataProviders, DataSources エクスポート
DataProviders, DataSoures それぞれエクスポートします。
ドキュメントフォルダにregというフォルダを作成してエクスポートしました。
3-7. レジストリ DataProviders, DataSources 編集
エクスポートした DataProviders, DataSources を編集します。
間違えても良いように _new としてコピーしたものを編集します。
regファイルを右クリックして、今回はメモ帳で編集しました。
OMGITWORKSのパスを全て、プライベートハイブのパスに変更します。
・変更前
・変更後
3-8. レジストリ DataProviders, DataSources インポート
パスをプライベートハイブに変更した DataProviders, DataSources をレジストリエディタでインポートします。DataProviders, DataSourcesがある_Config が付くレジストリキーにインポートします。
DataProviders を選択します。
インポートから先ほど編集した DataProviders_new.reg を開きます。
完了するとDataProvidersにJetDDEXProviderが追加されます。
DataProviders と同様に DataSources もインポートします。
3-9. VisualStudio2019 プライベートハイブアンロード
読み込んでいたプライベートハイブを選択します。
アンロードを左クリック。
警告メッセージが表示されます。
はいボタンを押してレジストリキーのアンロードを実行します。
4. machine.config に JetEntityFrameworkProvider 追加
machine.config をデスクトップにコピーして編集をします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
DbProviderFactories に JetEntityFrameworkProvider を追加します。
元の場所にmachine.configを上書きをします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
DB First 確認
Accessでデータベースを作成します。
NuGet から JetEntityFrameworkProvider をインストールします。
ADO.NET Entity Data Model からDbContextの名称を入力して追加します。
データベースから Code First を選択して次へ。
新しい接続を左クリックします。
データソースを変更します。
<その他>からJet DDEX provider for JetEntityFrameworkProviderを選択します。
DataSource と Provider を入力します。
接続文字列が作成されます。
モデルを作成するテーブルを選択します。
Employee、SampleContext が作成できました。