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

时间:2015-08-31 21:32:06

标签: .net firebird firebird-embedded

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

我能找到的大部分文档都是关于ADO.Net提供商的,但我正在寻找实体框架,具体如此:

1)如何使用app.config设置firebird EF6提供程序 2)并且可以选择如何使用新的EF6代码设置(通过覆盖DbConfiguration类:我不确定要为firebird EF6提供程序传递给SetExecutionStrategy()和SetDefaultConnectionFactory()方法。

提供商链接如下: http://www.firebirdsql.org/en/additional-downloads/

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

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

2 个答案:

答案 0 :(得分:3)

感谢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程序集版本。所以我做了以下

  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文件的section configuration / runtime / assemblyBinding / dependentAssembly部分找到。

        <bindingRedirect oldVersion="0.0.0.0-4.7.0.0" newVersion="4.7.0.0" />
    
  5. 基本上,NuGet包是错误的,并且不安装正确版本的Firebird.Data.FirebirdClient程序集。也许我运气不好,但这就是为什么我不是NuGet的粉丝,即使我知道它不是NuGet本身的问题。

    无论如何,正如你所看到的,让Firebird与实体框架一起工作并不容易(我不会告诉你我现在正在使用的Firebird DDEX软件包)。虽然firebird数据库本身对嵌入式数据库技术非常有前景。缺乏将其与实体框架集成的适当文档可遗传地使事情变得更加艰难。

答案 1 :(得分: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