【问题标题】:How to handle changing SQL Server database column type with EF Core如何使用 EF Core 处理更改 SQL Server 数据库列类型
【发布时间】:2022-01-07 00:27:21
【问题描述】:

我有一种情况,我们创建了一个 API (.NET Core C#),它可以部署在多个站点上,这些站点可以具有不同版本的 SQL Server 数据库(第三方数据库,我们无法更改它们)。问题是虽然表结构保持不变,但列类型可能会改变。例如,在站点 1 和站点 2 上的数据库中的表中有一个类型为 TINYINT 的字段,并且在站点 2 上更新了数据库,并且相同字段的新类型现在是 INT。我们使用 EF Core 2.2,数据库优先的方法来处理数据库,问题是当我们更新 API 以处理站点 2 的新 INT 类型时,站点 1 上的相同 API 会抛出关于无法转换字节的错误到 int32。我们不能为不同的网站保留不同版本的 API。

我的问题是:是否可以在 EF Core 中以某种方式处理这个问题?在 2.2 中?还是在任何较新的版本中?

我知道我可以在数据库中创建一个过程来获取数据并确保它始终返回相同的类型(我们不是写入数据库,只是读取),但这感觉就像一个丑陋的解决方案,更不用说涵盖我们需要的所有表格的艰巨任务。

也许对 EF 模型进行一些扩展?虽然我不知道这是否可能,如果可能,如何去做。

【问题讨论】:

  • 当然,您可以运行普通的 ADO.Net 代码来首先嗅探数据库,然后创建 EF 模型,其中某些属性是有条件地映射/不映射,或者值转换器打开/关闭。但我认为应该不惜一切代价避免这种情况。如果人们想要使用您的 API,那么要求特定的数据库模式是完全正常的。那应该是接受或离开的条件。
  • 感谢 Gert 的建议,但正如您所说,应该避免这样做,因此我们最终选择了“要么接受要么离开”

标签: c# sql-server .net-core entity-framework-core


【解决方案1】:

由于某些未知原因,EF Core 不包含通用功能来处理您难以置信的特定要求。

【讨论】:

  • 您能说得更具体些吗?这是一个相当大胆的声明,有些事情不能做。这需要充分的理由。
  • 如上所述,请为您的声明提供来源,以帮助其他人了解他们为什么以及如何解决他们的问题。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多