【问题标题】:How to transfer data (Entities) from one database to another如何将数据(实体)从一个数据库传输到另一个数据库
【发布时间】:2011-07-11 21:00:06
【问题描述】:

我有一个系统(使用实体框架)部署在各种生产系统和质量控制系统中。我的问题是数据输入通常只在我的系统(不同的数据库)的这些事件之一上完成。

我想找到将数据从一个数据库传输到另一个数据库的最佳方式。只要我的对象之间的关系保持不变,ID 就可以改变。我 98% 的数据在数据库中,其中一些是外部文件,我可以手动单独管理。

目前我们使用xml结构作为过渡文件。然后将文件导入目标系统,代码手动导入实体并重新创建数据。

我正在寻找一种更通用的方法来执行此操作,并且代码更少。由于我存储在实体中的所有数据都不能简单地创建一个大列表并将我的所有对象放入其中,然后在某些情况下将其序列化到一个外部文件中,最后一般将其中的所有实体导入我的目标系统中吗? (我可能必须小心维护关系 ID,但应该没问题...)

无论如何,我想知道是否有人会有聪明的方法,我很确定我不是第一个遇到类似问题的人。

谢谢!

【问题讨论】:

  • 你想通过 SSIS 进行 EF,因为......
  • 因为我不了解 SSIS ?我今天会研究一下,如果可以的话,删除链接。
  • #Sébastien 很抱歉我添加了答案,祝你好运。

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


【解决方案1】:

您需要对此进行一些处理。如果所有环境都包含相同的数据(不太可能),您可以复制。这是最自动的。但是 QA 环境不应该更新生产,所以你必须认真考虑这一点。

如果半自动化没问题,您可以使用来自各种供应商的工具。我个人使用 Red Gate 工具,但其他工具也很好。

您能否使用 EF 设置更自动化的推送?当然可以,但是你花的时间真的不值得。

【讨论】:

  • 原因在这里非常具体和普遍,我们有这个演示,所以我们需要为那个演示制作演示内容。我们希望在我们的 QC 环境中生成它,然后一旦它稳定(肯定会暴露错误),在“演示”“虚拟”产品站点上发布它,以便可以从 Web 访问。红门接缝是一个很好的解决方案,但它有点贵。
  • 如果你只需要通过这个演示,工具制造商都有试用期。我认为 Red Gate 是 14 岁,Altova 是 30 岁。我没有尝试过 Devart,但它们的价格要便宜一些。通过一些编程,Sync Framework 可能会工作,但由于我还没有玩过它,我不想推荐这条路径。
  • 那么“代码”方法而不是数据库方法怎么样,有什么解决方案吗?像序列化 ORM 之类的?
  • 你可以这样做,但你必须比“他们可以有不同的 ID”更好地计划这一点。任何 Microsoft 断开连接的数据范例都允许您在另一个数据库中设置上下文。与数据集相比,EF 有点痛苦,但并非不可能。我也可能会研究 Sync Framework 的代码方法,但我没有专业知识,所以我不直接推荐。
【解决方案2】:

在我看来,您可以检查以下一些方法:

1) 使用 Sql 比较或 Sql 数据比较。这些工具来自Red Gate,可以在here找到

2) 定期备份和恢复数据库。如果可以选择定期备份最新的数据库并将其还原到目标系统上,您可以这样做。我没有自动化这方面的经验,但这里有一个link 可以通过.net 做到这一点。

3) 您可以随时尝试创建自己的版本控制系统。我会想象一个这样的系统从某个表(或所有表)中选择所有记录,删除目标数据库中的所有记录并插入它们。不过,这似乎相当复杂,因为您必须担心关系、数据依赖关系等。

希望这在某种程度上有所帮助。 问候


【讨论】:

    【解决方案3】:

    如果您出于某种原因对现有工具不满意,您可能需要查看Sync Framework 并为您的特定数据库自行实现此功能。

    【讨论】:

      【解决方案4】:

      鉴于您所描述的,出于演示目的将数据从一个 SQL Server 推送到另一个,您应该考虑SQL Server Integration Services

      如果您有一个简单的场景,您只需将数据和对象从 DB 移动到下一个,您可以使用它们的内置向导。如果您需要做自定义的东西,您可以使用 C# 和 SQL(您已经知道的工具)构建复杂的工作流程。注意:您想要的大部分内容都带有standard edition,因此如果您使用的是 express,这就不那么有趣了。

      如果您没有 SQL Server(因此您必须出去买东西)并且如果您有兴趣了解 DB 之间的变化(例如查看代码更改),Red Gate 产品的故事会更引人注目在源代码控制产品的 .cs 文件中)

      【讨论】:

      • 挑战不仅在于将数据从一个数据库移动到另一个数据库,还在于移动与数据库中某个ID间接相关的数据的特定SLICE。
      • @NielsBrinch 我想我已经解决了这个问题,如果你需要做自定义的东西,你可以使用 C# 和 SQL 构建复杂的工作流
      • 对不起,我把这个评论放在了错误的帖子上。我的错。很抱歉造成混乱。
      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2010-09-19
      • 2016-07-28
      • 2016-01-19
      相关资源
      最近更新 更多