使用Entity Framework动态使用不同的ADO.NET提供程序

时间:2015-08-19 15:38:31

标签: .net entity-framework ado.net

我的应用程序可以使用不同的数据库,如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方法,以便它可以使用吗?

0 个答案:

没有答案