背景
我们正在升级旧版导入工具,它的作用是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库,并使用不同的模式沿途执行转换和映射。
这是一个帮助解释正在发生的事情的示例
假设源数据库有一张表名为Client_Info
目标表有两个名为Clients
and Cities
Source.dbo.Client_Info
+-----------+----------+----------+-------+
| FirstName | LastName | City | State |
+-----------+----------+----------+-------+
| John | Smith | Richmond | VA |
| Jeff | Walters | New York | NY |
+-----------+----------+----------+-------+
目标.dbo.Clients
+-----------+-------------+--------------------------------------+
| FirstName | LastName | CityGuid |
+-----------+-------------+--------------------------------------+
| Scott | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
+-----------+-------------+--------------------------------------+
目的地.dbo.城市
+--------------------------------------+----------+-------+
| CityGuid | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA |
+--------------------------------------+----------+-------+
合并后我希望目的地看起来像这样
目标.dbo.Clients
+-----------+-------------+--------------------------------------+
| FirstName | LastName | CityGuid |
+-----------+-------------+--------------------------------------+
| Scott | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
| John | Smith | 07d954bf-3214-4df4-b640-48c27db2b1ed |
| Jeff | Walters | 98a75f88-eeaa-49ba-b464-2ac988a7b093 |
+-----------+-------------+--------------------------------------+
目的地.dbo.城市
+--------------------------------------+----------+-------+
| CityGuid | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA |
| 98a75f88-eeaa-49ba-b464-2ac988a7b093 | New York | NY |
+--------------------------------------+----------+-------+
目前,它是一个 VB6 项目,我们仅使用硬编码的 SQL 语句,使用临时 #t 表来整理记录,并根据需要使用现有值或新值填充 GUID 列。
此后,我们已转为 C# .NET 商店,并且认为是时候将导入工具更新为 C# 了,因为当我们的软件新版本出现时,目标数据库发生变化,对工具进行更改变得越来越困难(只是为了安装 Visual Studio 6 并在 Windows 8 上运行而进行的斗争)。
我的问题
像 NHibernate 这样的 ORM 工具是适合这项工作的工具吗?我们之前没有人真正使用过 ORM(而且我们不是编写与新数据库进行日常使用的软件的开发团队,我们只是负责将旧数据库迁移到新数据库,并且“真正的开发人员”告诉我们他们对每个版本的架构进行了哪些更改)。我不太确定是否使用 ORM,因为我认为 ORM 用于诸如CRUD
对客户端的操作,而不是像这样对服务器数据库迁移的操作。
我认为“正确”的方法是使用 SSIS,但我的部门中没有人熟悉它我的主管觉得 https://softwareengineering.stackexchange.com/questions/184107/my-boss-has-a-bad-case-of-not-invented-here让每个人学习另一种语言来维护它会花费太多的时间和资源(这个迁移工具是在我在另一个问题中讨论的步骤之后运行的)。
我主要寻找的是一种进行迁移的方法:
- 海量数据
- 允许在传输期间设置某些列(例如重新使用外键 GUID)
- 随着目标数据库架构的更改而轻松更改
- 最好用 C# 或 SQL 完成。
满足这些要求我应该寻找什么样的工具?
我问这个问题是因为我认为 ORM 不是正确的做法,但我不确定应该使用什么来代替。除了 SSIS(因为太不同而已从表中删除)之外,我不知道除了使用硬编码的 SQL 语句之外还能做什么,但这打破了我心中的“易于更改”要求。