如何将数据(实体)从一个数据库传输到另一个数据库

时间:2011-07-11 21:00:06

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

我有一个系统(使用实体框架),该系统部署在各种生产系统和质量控制系统中。我的问题是数据输入通常仅在我的系统中出现的一个(不同的数据库)中完成。

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

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:2)

你需要解决这个问题。如果所有环境包含相同的数据(不太可能),您可以复制。这是最自动的。但QA环境不应该更新生产,所以你必须真正考虑到这一点。

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

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

答案 1 :(得分:1)

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

1)使用Sql Compare或Sql Data Compare。这些工具来自Red Gate,可以找到here

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

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

希望这在某种程度上有所帮助。 此致


答案 2 :(得分:1)

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

答案 3 :(得分:1)

根据您的描述,将数据从One SQL Server推送到另一个SQL Server以进行演示,您应该考虑SQL Server Integration Services

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

当您没有SQL Server时,Red Gate产品的故事更具吸引力(因此您必须外出购买东西)并且如果您有兴趣了解DB之间的变化(例如查看代码更改)在源代码管理产品中的.cs文件中)