我一直在努力寻找有关如何在.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
答案 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程序集版本。所以我做了以下
最后在我的项目中编辑了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" />
基本上,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