感谢magicandre1981 评论,我尝试使用NuGet 而不是简单地从firebird 的网站下载dll。
我通常避免使用 NuGet 自动安装包,但它帮助我走得更远,所以我还是决定试一试:在初始化实体框架上下文期间,我的错误消息不再出现。
尽管在编译过程中我收到了一个警告,提示两个程序集共享一个依赖项但版本号不同,您猜对了……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 是我的 csproj 的名称,其唯一目的是使用实体框架测试 firebird。解决方案只有这个项目。FirebirdSql.Data.FirebirdClient 已安装,因为我使用 NuGet 以下命令安装了它:
Install-Package EntityFramework.Firebird
这基本上意味着 NuGet 包确实安装了错误的 Firebird.Data.FirebirdClient 程序集版本。所以我做了以下
- 编辑了 NuGet packages.config 文件,以便下载 Firebird.Data.FirebirdClient 程序集版本的正确版本
- 删除了 Firebird.Data.FirebirdClient 的旧版本包
- 强制恢复我的 NuGet 包,这次下载了正确的版本。
最后在我的项目中编辑了 app.config,因此 bindingRedirect 将使用 4.7.0.0 而不是 4.5.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数据库本身对于嵌入式数据库技术来说似乎很有前途。遗憾的是,缺乏将其与实体框架集成的适当文档使事情变得比应有的困难得多。