.NET Core 5中如何正确注册Firebird数据库提供程序?
问题根因
.NET 5 不再读取app.config中<system.data><DbProviderFactories>节点的提供程序注册逻辑,你当前配置里把FirebirdClientFactory加到configSections的操作是无效的——configSections的作用是声明自定义配置节点的解析规则,根本不是用来注册ADO.NET提供程序的。另外你同时安装了EF6和EF Core版本的Firebird提供程序包,两个包的程序集加载逻辑冲突,也会放大这个报错。
修复步骤
- 清理冗余依赖
从你保留的<entityFramework>配置节点看,你是把EF6版本的项目移植到.NET 5,不是用EF Core,直接卸载EntityFrameworkCore.Firebird包避免加载冲突。安装包时优先直接装稳定版EntityFramework.Firebird,它会自动拉取版本完全匹配的FirebirdSql.Data.FirebirdClient依赖,不需要手动单独指定客户端版本,避免版本不兼容。 - 删除无效配置
删掉app.config里多余的这行错误配置:<section name="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient"/> - 代码侧注册ADO.NET提供程序
.NET Core/.NET 5+ 下ADO.NET提供程序工厂不再支持配置文件注册,必须在程序启动入口(EF上下文初始化之前)执行注册代码。如果是ASP.NET Core项目就放在Startup.ConfigureServices最开头,如果是控制台、WinForms/WPF项目就放在Main方法第一行:using System.Data.Common; using FirebirdSql.Data.FirebirdClient; DbProviderFactories.RegisterFactory( "FirebirdSql.Data.FirebirdClient", FirebirdClientFactory.Instance ); - 修正app.config配置
修正后的配置不需要任何system.data相关节点,保留EF6的有效配置即可,完整参考如下:<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> <entityFramework> <defaultConnectionFactory type="EntityFramework.Firebird.FbConnectionFactory, EntityFramework.Firebird" /> <providers> <provider invariantName="FirebirdSql.Data.FirebirdClient" type="EntityFramework.Firebird.FbProviderServices, EntityFramework.Firebird"/> </providers> </entityFramework> </configuration> - 发布注意事项
如果是桌面项目做独立发布,先把项目文件里的PublishTrimmed属性设为false,程序集裁剪会误删Firebird客户端的元数据,导致提供程序加载失败,功能验证正常后再根据需要调整裁剪配置。
内容的提问来源于stack exchange,提问作者Katharina Utecht
相关产品推荐
相关产品推荐

