2

我一直在尝试查找有关如何为 firebird 数据库(嵌入式版本)设置实体框架 6.0 提供程序的任何文档,但在 .Net 应用程序中没有任何运气。

我能找到的大多数文档都是关于 ADO.Net 提供程序的,但我正在寻找一个特别的实体框架:

1) 如何使用 app.config 设置 firebird EF6 提供程序 2) 以及如何使用新的 EF6 代码设置(通过覆盖 DbConfiguration 类:我不确定传递给 SetExecutionStrategy() 和 SetDefaultConnectionFactory() 方法的内容)火鸟 EF6 提供程序。

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

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

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

4

2 回答 2

4

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

我通常避免使用 NuGet 自动安装包,但它帮助我走得更远,所以我还是决定试一试:在初始化实体框架上下文期间,我的错误消息不再出现。

尽管在编译过程中我收到了一个警告,提示两个程序集共享一个依赖项但版本号不同,您猜对了……Vis​​ual 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 程序集版本。所以我做了以下

  1. 编辑了 NuGet packages.config 文件,以便下载 Firebird.Data.FirebirdClient 程序集版本的正确版本
  2. 删除了 Firebird.Data.FirebirdClient 的旧版本包
  3. 强制恢复我的 NuGet 包,这次下载了正确的版本。
  4. 最后在我的项目中编辑了 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数据库本身对于嵌入式数据库技术来说似乎很有前途。遗憾的是,缺乏将其与实体框架集成的适当文档使事情变得比应有的困难得多。

于 2015-09-01T19:25:26.123 回答
0

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

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
于 2020-06-04T14:35:07.497 回答