【问题标题】:Is it possible to use Entity Framework Core with ODBC?是否可以将 Entity Framework Core 与 ODBC 一起使用?
【发布时间】:2021-05-12 01:49:29
【问题描述】:

我公司的主要软件应用程序已经二十年没有更新过了。我预计很快就会对它进行彻底的重写。为此,我开始阅读 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 时无需修改的 Entity Framework Core 应用程序?

【问题讨论】:

  • 答案是一样的——甚至不要那样做。为 EF Core 编写自己的 ODBC 提供程序大约需要几个月的时间才能修复错误。你真的要参加那个赌博?当前的 SQLServer 和 PostgreSQL 提供程序比 ODBC 更快。是的,如果没有提供程序特定的映射和类型,您可以在 SQLServer 和 PostgreSQL 之间切换。
  • 感谢您的回复。不,我绝对不想费心编写自己的 ODBC 提供程序。我是否需要为 SQL Server 和 PostgreSQL 数据库单独构建,或者有没有办法使用 EF Core 创建一个可以与其中任何一个一起使用的程序,仅取决于 applicaton.json 文件中的连接字符串?

标签: entity-framework-core odbc


【解决方案1】:

您可以使用 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。我使用类似的解决方案读取 Environment 类型来加载基于部署的 Prod 或 QA 连接字符串。原则上,这应该可以完成相同的任务,而无需重新构建和重新部署代码库。

【讨论】:

  • 谢谢。我认为这将满足我的需求。我只希望当我们真正开始更新这个应用程序时我会记住它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多