如何设置.Net应用程序使用火鸟实体框架提供商(用于嵌入式数据库)。

问题描述 投票:2回答:2

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

我能找到的大部分文档都是关于ADO.Net提供者的,但我想找实体框架的,所以特别想知道。

1)如何使用app.config2)和optionnaly如何使用新的EF6代码设置来设置(通过覆盖DbConfiguration类:我不确定该如何传递给Firebird EF6提供者的SetExecutionStrategy()和SetDefaultConnectionFactory()方法。

这些提供者的链接在这里。http:/www.firebirdsql.orgenadditional-downloads

还有我在网站上找到的关于.net的文档(但只针对ADO,没有实体框架dlls的文档)。http:/www.firebirdsql.orgennet-examples-of-use

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

.net firebird firebird-embedded
2个回答
4
投票

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

我通常避免使用NuGet自动安装包,但它帮助我得到了进一步的发展,所以我决定无论如何都要试一试:在实体框架上下文的初始化过程中,我的错误信息不再出现。

在编译过程中,我收到了一个警告,说两个汇编共享一个依赖关系,但版本号不同,你猜对了......。Visual Studio并没有很好地告诉我这些程序集是什么。我只是暂时忽略了它,运行我的程序得到一个System.Data.ProviderIncompatibleException。对于Visual Studio的警告,我只是忽略了,并没有那么奇怪。

所以回到警告,感谢来自github的AsmSpy.exe (https:/github.comikehadlowAsmSpy。),我发现。

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文件的configurationruntimeassemblyBindingdependentAssembly部分找到。

        <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数据库本身似乎很有前途。可惜的是,缺乏适当的文档来将它与实体框架集成,使得事情变得比它应该的要难得多。


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
© www.soinside.com 2019 - 2024. All rights reserved.