【发布时间】:2013-06-12 20:03:12
【问题描述】:
背景
我们正在升级旧版导入工具,它所做的是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库,该数据库具有不同的架构,在此过程中执行翻译和映射。
这里有一个例子来帮助解释正在发生的事情
假设源数据库有一个名为Client_Info的表,目标表有两个名为Clients和Cities的表
Source.dbo.Client_Info
+-----------+----------+----------+-------+
| FirstName | LastName | City | State |
+-----------+----------+----------+-------+
| John | Smith | Richmond | VA |
| Jeff | Walters | New York | NY |
+-----------+----------+----------+-------+
Dest.dbo.Clients
+-----------+-------------+--------------------------------------+
| FirstName | LastName | CityGuid |
+-----------+-------------+--------------------------------------+
| Scott | Chamberlain | 07d954bf-3214-4df4-b640-48c27db2b1ed |
+-----------+-------------+--------------------------------------+
Dest.dbo.Cities
+--------------------------------------+----------+-------+
| CityGuid | CityName | State |
+--------------------------------------+----------+-------+
| 07d954bf-3214-4df4-b640-48c27db2b1ed | Richmond | VA |
+--------------------------------------+----------+-------+
合并后我希望目的地看起来像这样
Dest.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 |
+-----------+-------------+--------------------------------------+
Dest.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,但我部门中没有人熟悉它 and my supervisor feels 让每个人都学习另一种语言需要太多时间和资源维护它(这个迁移工具是在我在另一个问题中谈到的步骤之后运行的)。
我正在寻找的主要是一种进行此迁移的方法:
- 海量数据
- 允许在传输过程中设置某些列(例如重复使用外键 GUID)
- 易于随着目标数据库架构的变化而变化
- 最好在 C# 或 SQL 中完成。
我应该寻找什么样的工具来满足这些要求?
我问这个问题是因为我不认为 ORM 是正确的做法,但我不确定应该改用什么。除了 SSIS(因为太不同而被取消了),我不知道除了使用硬编码的 SQL 语句之外还能做什么,但这打破了我心中的“易于更改”的要求。
【问题讨论】:
-
不,ORM 听起来并不适合将数据从一种模式转换为另一种模式。
-
@MattBall 我不这么认为,这就是促使我提出这个问题的原因。
-
嗯,我学到了一个新术语 ETL(提取变换负载),这就是我正在尝试做的事情,这些是我需要寻找的工具。
-
我会争取让 SSIS 重新回到桌面上,脚本组件可以在 C# 中,界面使用 Visual Studio,大部分东西都是拖放。
-
我同意 @axawire 的观点,对于已经熟悉 C#、Visual Studio 和基本数据库的人来说,SSIS 并不是一个巨大的学习曲线。唯一的“语言”是脚本对象,可以在 C# 中完成。对于高级用途,有更多的学习曲线,但对于简单的 ETL,学习起来并不难。
标签: c# .net sql nhibernate orm