magicandre1981 のコメントのおかげで、単に firebird の Web サイトから dll をダウンロードする代わりに、NuGet を使用してみました。
通常、NuGet の自動インストール パッケージは避けますが、それがさらに役立つので、とにかく試してみることにしました。エンティティ フレームワーク コンテキストの初期化中にエラー メッセージが表示されなくなりました。
ただし、コンパイル中に、依存関係を共有しているがバージョン番号が異なる 2 つのアセンブリについて警告がありました。ご想像のとおりです... Visual Studio は、それらのアセンブリが何であるかを判断するのに十分ではありませんでした。とりあえず無視して、プログラムを実行して System.Data.ProviderIncompatibleException を取得しました。無視した Visual Studio の警告はそれほど驚くことではありません。
警告に戻り、github ( https://github.com/mikehadlow/AsmSpy ) のAsmSpy.exe のおかげで、次のことがわかりました。
Reference: FirebirdSql.Data.FirebirdClient
4.7.0.0 by EntityFramework.Firebird
4.5.0.0 by FirebirdTest
FirebirdTest は、エンティティ フレームワークで firebird をテストすることを唯一の目的とする csproj の名前です。ソリューションには、このプロジェクトしかありません。NuGet次のコマンドを使用してインストールしたため、FirebirdSql.Data.FirebirdClientがインストールされました。
Install-Package EntityFramework.Firebird
これは基本的に、NuGet パッケージが間違った Firebird.Data.FirebirdClient アセンブリ バージョンをインストールしたことを意味します。だから私は次のことをしました
- NuGet packages.config ファイルを編集して、Firebird.Data.FirebirdClient アセンブリ バージョンの正しいバージョンがダウンロードされるようにしました。
- Firebird.Data.FirebirdClient の古いバージョンのパッケージを削除しました
- NuGet パッケージを強制的に復元しましたが、今回は正しいバージョンがダウンロードされました。
そして最後にプロジェクトの app.config を編集して、bindingRedirect が 4.5.0.0 ではなく 4.7.0.0 を使用するようにしました。これは、app.config ファイルのセクション configuration/runtime/assemblyBinding/dependentAssembly セクション内にあります。
<bindingRedirect oldVersion="0.0.0.0-4.7.0.0" newVersion="4.7.0.0" />
基本的に、NuGet パッケージは間違っており、正しいバージョンの Firebird.Data.FirebirdClient アセンブリをインストールしません。運が悪いのかもしれませんが、NuGet 自体が問題ではないことを知っていても、NuGet のファンではないのはそのためです。
いずれにせよ、おわかりのように、Firebird をエンティティ フレームワークで動作させるのは簡単ではありません (Firebird DDEX パッケージで現在経験している地獄については説明しません)。一方で、firebird データベース自体は組み込みデータベース技術として非常に有望に思えます。エンティティ フレームワークと統合するための適切なドキュメントがないため、悲しいことに、必要以上に作業が難しくなっています。