gpt4 book ai didi

c# - 如何正确封装对具有(几乎)相同模式的不同数据库系统的访问?

转载 作者:行者123 更新时间:2023-11-30 22:20:42 27 4
gpt4 key购买 nike

起始情况:MS SQL 中有一个现有的数据库模式,它与 MySQL 中的现有模式完全相同(数据库优先 - 无法更改,因为已广泛安装)。但是,它们在用于相应列的数据类型方面可能略有不同。该数据库系统必须通过 C# 访问。

问题:我如何才能从应用程序的角度正确封装对两者中任何一个的访问,即程序员必须不知道他查询的是 MySQL 还是 MSSQL 数据库?

示例:我有一个表,比如说 MyTable,它有一个 bigint 主列“Id”和一个 varchar 列“data”。

我的想法是使用 EntityFramework(版本 6)自动生成所有的 CRUD 操作。所以我为 MySQL 和 MSSQL 创建了一个 .edmx 模型,我想将其注入(inject)逻辑层(即结果上下文)。但我注意到,在 MySQL 的情况下,Id (bigint) 被映射到 decimal,而在 MS SQL 中它被映射到 long。现在我想知道这种 EF 方法是否合适,因为两个数据库系统中的相同(命名)列(相同命名表)也有不同的数据类型。出于这个原因,一位同事喜欢自己编写所有语句,就像在遗留软件版本中所做的那样,即根本不使用 EF,而只提供一种由纯 SQL 为 MS SQL 和 MySQL 实现的外观方法。

但是我不喜欢自己写所有的sql语句...

正如我上面提到的,我需要封装数据库访问——但是如果不同的数据库系统有不同的映射——如何正确地做到这一点?如果 MSSQL 和 MySQL 映射之间存在任何差异,我可以在 EF 模型前面构建一个外观并实现(数据类型,比如 API)适配器,但我认为这种方法导致抽象的抽象。

有什么建议吗?

最佳答案

对于那些感兴趣的人:我们设法使用单一上下文,因为两个数据库结构几乎相同。只需将相应的连接字符串传递给 Entites (DbContext) 构造函数即可。因此有两种 edmx 模型:一种用于 MySQL,一种用于 MSSQL,而具体模型类仅在一侧(在我们的例子中为 MSSQL)。

关于c# - 如何正确封装对具有(几乎)相同模式的不同数据库系统的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com