我的应用程序可以使用不同的数据库,如SQL Server,MySQL,Oracle,PostgreSQL或SQLite。它知道如何加载相关的ADO.NET程序集(其DLL文件名已知)并在其中找到DbProviderFactory
类型。这个工厂为我提供了在普通ADO.NET级别上使用数据库连接所需的一切。
输入实体框架。我以前使用自己的O / RM,但想用EF 6 Code First替换它。我自己的O / RM只生成SQL并使用DbCommand
类运行它。 EF似乎做得更多,需要特殊配置。我无法将程序集引用添加到任何受支持的数据库客户端提供程序,并且需要部署所有这些文件。我需要一个在运行时动态加载程序集并从那里找到方法的解决方案。然后,根据应使用的数据库,我只部署所需的DLL。
目前还没有工作。我收到了PostgreSQL的错误消息:
System.NotSupportedException:无法确定提供程序名称 类型' Npgsql.NpgsqlFactory'的提供者工厂。确保 ADO.NET提供程序已在应用程序配置中安装或注册。
当我尝试将实体添加到DbSet
时会发生这种情况。数据库服务器连接已打开,我的架构安装完成。 (我不使用EF迁移,但我不使用连接字符串,但在需要时自己打开连接。)我知道我还没有在app.config文件中添加任何特定配置。我完全不喜欢那个文件,并希望完全避免使用它。
是否有一些API可用于注册EF所需的任何内容?例如,我有Npgsql提供程序的类型和实例。我可以把它传递给一些EF方法,以便它可以使用吗?