如何设置 .Net 应用程序以使用 firebird entity framework 提供程序(对于嵌入式数据库)

How to setup .Net application to use firebird entity framework provider (for an embedded database)

我一直在努力寻找任何关于如何在 .Net 应用程序中为 firebird 数据库(嵌入式版本)设置 entity framework 6.0 提供程序的文档。

我能找到的大部分文档都是关于 ADO.Net 提供者的,但我正在寻找 entity framework 提供者,所以特别是:

1) 如何使用 app.config 设置 firebird EF6 提供程序 2) 以及可选地如何使用新的 EF6 代码设置进行设置(通过覆盖 DbConfiguration class:我不确定将什么传递给 firebird EF6 提供程序的 SetExecutionStrategy() 和 SetDefaultConnectionFactory() 方法。

Link 提供者在这里: http://www.firebirdsql.org/en/additional-downloads/

以及我在网站上找到的关于 .net 的文档(但仅适用于 ADO,entity framework dll 上没有任何内容)。 http://www.firebirdsql.org/en/net-examples-of-use/

我唯一知道的是对于嵌入式数据库,ServerType 应该是 1

感谢 magicandre1981 的评论,我尝试使用 NuGet 而不是简单地从 firebird 的网站下载 dll。

我通常避免使用 NuGet 自动安装包,但它帮助我走得更远,所以我还是决定尝试一下:在 entity framework 上下文初始化期间,我遇到的错误消息不再显示。

虽然在编译期间我收到了一个警告,关于两个共享依赖但版本号不同的程序集,你猜对了......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 的名称,其唯一目的是使用 entity framework 测试 firebird。解决方案只有这个项目。 FirebirdSql.Data.FirebirdClient 已安装,因为我使用 NuGet 以下命令安装了它:

Install-Package EntityFramework.Firebird

这基本上意味着 NuGet 包确实安装了错误的 Firebird.Data.FirebirdClient 程序集版本。所以我做了以下

  1. 编辑了 NuGet packages.config 文件,以便下载 Firebird.Data.FirebirdClient 程序集版本的正确版本
  2. 删除了Firebird.Data.FirebirdClient
  3. 的旧版本包
  4. 强制恢复我的 NuGet 包,这次下载了正确的版本。
  5. 最后在我的项目中编辑了 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 与 entity framework 一起工作并不容易(而且我不会告诉您我现在使用 Firebird DDEX 包所经历的地狱)。而 firebird 数据库本身似乎非常有前途的一种嵌入式数据库技术。遗憾的是,缺乏将其与 entity framework 集成的适当文档使事情变得比它应该的要困难得多。

我使用了以下命令并生成了模型

Scaffold-DbContext "User=SYSDBA;Password=masterkey;Database=dbname;DataSource=xxx.xxx.xxx;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;PacketSize=8192;ServerType=0;" -o Models