如何将客户从CRM数据库复制到另一个CRM数据库?使用c#和实体框架将一组记录从一个sql服务器复制到另一个记录
我的要求是,从(生产)SQL服务器,我需要能够选择一个客户,并将他的相关数据的100%复制到另一个(测试)SQL服务器。
我已经有了一个实体模型,用于我的web应用程序,我希望使用相同的方式并将所有客户信息作为实体读取。但我不确定,我应该如何使用这些实体并连接到另一个sql服务器(我计划使用自定义配置来了解目标sql-server的地址)。
任何想法?
如何将客户从CRM数据库复制到另一个CRM数据库?使用c#和实体框架将一组记录从一个sql服务器复制到另一个记录
我的要求是,从(生产)SQL服务器,我需要能够选择一个客户,并将他的相关数据的100%复制到另一个(测试)SQL服务器。
我已经有了一个实体模型,用于我的web应用程序,我希望使用相同的方式并将所有客户信息作为实体读取。但我不确定,我应该如何使用这些实体并连接到另一个sql服务器(我计划使用自定义配置来了解目标sql-server的地址)。
任何想法?
您可以为您的客户和您想要传输的所有相关实体定义实体模型。接下来,您必须在测试服务器上定义完全相同的数据库结构,以便实体模型可用于两台服务器。
的基本情况可以(伪):
Customer customer = null;
using (var context = new MyContext("ProductionConnectionString"))
{
// You must use Include to load all related data
customer = context.Customers.Include("...").Where(...).Single();
}
using (var context= new MyContext("TestConnectionString"))
{
context.Customers.AddObject(customer); // Inserts everything
using (var scope = new TransactionScope())
{
context.SaveChanges();
scope.Complete();
}
}
的问题将是,如果数据的一部分,在DB已经存在。在这种情况下,您必须首先从测试数据库加载客户,并手动将生产客户的数据合并到已加载的数据中,以便现有数据不会再次插入,并且修改/删除的数据会在测试数据库中更新/删除。
谢谢,您提供的伪代码正是我想通过交换连接实例化新上下文的内容。并且您试图预测目标数据库中部分数据的问题应该/不会发生,因为我打算将生产中的客户添加为新客户进行测试。当然,正如你所说的,db中的模式应该是相同的,为了解决这个问题,我已经在我的数据库中使用了一个版本管理系统,我打算在启动客户副本之前对其进行验证。 – Nauman 2011-02-23 10:53:43
你也可以评论两种方法的优雅和表现吗?就像在使用一个存储过程和使用C#&EF的过程一样?不知道由于某种原因,我个人觉得基于C#和EF的解决方案会给我更多的控制和错误处理和可恢复性? – Nauman 2011-02-23 11:00:13
为什么不创建原始数据库的备份并在另一个上重新创建它? – Maciek 2011-02-23 06:23:50
@Maciek:我的客户关系管理系统的生产规模为40+ GB,因此这个想法毫无疑问。 – Nauman 2011-02-23 06:26:28
如何在一个存储过程中执行此操作,并将参数作为目标数据库和服务器的名称?我宁愿在sql server端(存储过程)中这样做,因为无论何时更改db模式,sp都会失败或不再编译,并且将更容易找出原因。 – 2011-02-23 07:17:56