背景
我们正在升级旧版导入工具,它所做的是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库,该数据库具有不同的模式,在此过程中执行翻译和映射。
这是一个示例来帮助解释正在发生的事情
假设源数据库有一个名为Client_Info
的表,目标表有两个名为Clients
和的表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.Cities
+--------------------------------------+----------+-------+
| 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.Cities
+--------------------------------------+----------+-------+
| 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,但我部门中没有人熟悉它,我的主管认为让每个人都学习另一种语言来维护它需要太多时间和资源(这个迁移工具是在我在另一个问题中谈到的步骤之后运行的)。
我正在寻找的主要是一种进行此迁移的方法:
- 海量数据
- 允许在传输期间设置某些列(例如重用外键 GUID)
- 随着目标数据库架构的更改,易于更改
- 最好在 C# 或 SQL 中完成。
我应该寻找什么样的工具来满足这些要求?
我问这个问题是因为我认为 ORM 不是正确的做法,但我不确定应该使用什么来代替。除了 SSIS(因为太不同而被取消)之外,我不知道除了使用硬编码的 SQL 语句之外还能做什么,但这打破了我心中的“易于更改”的要求。