Entity framework core 是否可以将实体框架核心与ODBC一起使用?

Entity framework core 是否可以将实体框架核心与ODBC一起使用?,entity-framework-core,odbc,Entity Framework Core,Odbc,我公司的主要软件应用程序已经二十年没有更新了。我希望很快就能把它完全重写一遍。为此,我开始阅读亚当·弗里曼(Adam Freeman)的《Pro ASP.Net Core 3》(第8版)一书 我们的应用程序是独立于特定的数据库类型编写的。我们的大多数客户使用PostgreSQL,但少数客户使用SQL Server。因此,我们使用ODBC,因为这两个数据库以及其他几个数据库都有ODBC驱动程序。应用程序不需要对数据库进行任何处理,ODBC工作良好。我们将ODBC DSN配置为与客户拥有的任何数据库

我公司的主要软件应用程序已经二十年没有更新了。我希望很快就能把它完全重写一遍。为此,我开始阅读亚当·弗里曼(Adam Freeman)的《Pro ASP.Net Core 3》(第8版)一书

我们的应用程序是独立于特定的数据库类型编写的。我们的大多数客户使用PostgreSQL,但少数客户使用SQL Server。因此,我们使用ODBC,因为这两个数据库以及其他几个数据库都有ODBC驱动程序。应用程序不需要对数据库进行任何处理,ODBC工作良好。我们将ODBC DSN配置为与客户拥有的任何数据库通信,并且应用程序本身无需更改

搜索“Entity Framework Core ODBC”让我找到了EF Core Github,人们在那里提出了类似的问题,答案大多是“你到底为什么要这么做?”。嗯,我需要这样做


我是否可以将EF Core与ODBC一起使用,或者是否有其他方法可以设置实体框架核心应用程序,如果基础数据库从PostgreSQL更改为SQL Server,则不必修改该应用程序?

您可以使用appsettings.json来存储用于在两者之间交换的值。这些环境配置会在更改时重新加载(尽管您可能必须重新启动应用程序才能再次读取它们,但我不确定是否会这样)

不管怎样,我认为这方面的东西会适合你的需要

if (Configuration.GetSection("dbOptions")["postgres"]))
    services.AddDbContext<ApplicationDbContext>(options => options.UseNpgsql(Configuration.GetConnectionString("PostgresConnectionString")));
  else
    services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerConnectionString")));
if(Configuration.GetSection(“dbOptions”)[“postgres”])
services.AddDbContext(options=>options.UseNpgsql(Configuration.GetConnectionString(“PostgresConnectionString”));
其他的
services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“SqlServerConnectionString”));

编辑:我将其放在Startup.cs中,您通常会在其中配置DBContext。我使用类似的解决方案读取环境类型,根据部署加载Prod或QA连接字符串。原则上,这应该可以完成相同的任务,而不需要重建和重新部署代码库。

答案是一样的-甚至不要这样做。为EF Core编写自己的ODBC提供程序需要几个月的时间,无需修复错误。你真的想参与赌博吗?当前SQLServer和PostgreSQL提供程序比ODBC快。是的,如果没有特定于提供程序的映射和类型,您可以在SQLServer和PostgreSQL之间切换。谢谢您的回复。不,我绝对不想为编写自己的ODBC提供程序而烦恼。我是否需要为SQL Server和PostgreSQL数据库分别构建,或者是否有一种方法可以使用EF Core创建一个可以与其中任何一个一起工作的程序,这仅取决于applicaton.json文件中的连接字符串?谢谢。我想这能满足我的需要。我只希望当我们真正着手更新这个应用程序时,我会记住它。