是否可以将 Entity Framework Core 与 ODBC 一起使用?

Is it possible to use Entity Framework Core with ODBC?

我公司的主要软件应用程序已经二十年没有更新了。我希望很快就能完全重写它。为此,我开始阅读 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 一起使用吗,或者是否有其他方法可以设置一个 Entity Framework 如果基础数据库从 Postgre 发生更改则无需修改的核心应用程序SQL到SQL服务器?

您可以使用 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")));

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