我目前正在尝试将.NET框架应用程序移植到.NET核心。我们用火鸟做数据库。我更新了依赖项,大多数问题都可以解决,但是在编译和启动程序时,我得到了错误:
无法确定'FirebirdSql.Data.FirebirdClient.FirebirdClientFactory'.类型的提供者工厂的提供程序名称的
确保ADO.NET提供程序已安装或注册在应用程序配置中。
旧的app.config看起来是这样的:
configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="FirebirdSql.Data.FirebirdClient"/>
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient"/>
</DbProviderFactories>
</system.data>system.data在.NET核心中不再可用,一些依赖项已经改变。所以我的新app.config看起来是这样的:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<section name="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient"/>
</configSections>
<entityFramework>
<defaultConnectionFactory type="EntityFramework.Firebird.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="EntityFramework.Firebird.FbProviderServices, EntityFramework.Firebird"/>
</providers>
</entityFramework>我尝试过不同的方法,我已经阅读了文档,并确保了依赖项EntityFramework.Firebird、EntityFrameworkCore.Firebird和Firebird.Sql.FirebirdClient在其中,其中包含了app.config中的类引用。我真的不知道缺少了什么,我相信这是显而易见的。所以马比在这里知道我能做些什么来提供工厂。
发布于 2022-06-17 11:41:15
因此,答案是您不能再在DbProviderFactory中声明app.config了。我在一些StackOverflow问题中发现了这一点,我再也找不到链接了。
但是,您可以在启动应用程序期间以编程方式注册它:
DbProviderFactories.RegisterFactory("firebird", FirebirdSql.Data.FirebirdClient.FirebirdClientFactory.Instance);在app.config使用中:
<entityFramework>
<defaultConnectionFactory type="EntityFramework.Firebird.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<provider invariantName="firebird" type="EntityFramework.Firebird.FbProviderServices, EntityFramework.Firebird"/>
</providers>
</entityFramework>提供程序与匹配的invariantName和启动期间注册的密钥匹配。
这套装置对我有效。
https://stackoverflow.com/questions/72647469
复制相似问题