鉴于两个相同模式的数据库,有没有简单的方法在两者之间传输记录?我正在使用LINQ to SQL,因为我需要在此过程中执行一些额外的操作,并且使用表示我正在传输的记录的对象使这更容易.这是一个小规模的帮助应用程序,因此SSIS可能有点过分,SQLBulkCopy不允许我在途中轻松查询对象.
我想做的是:
public static void TransferCustomer
(DBDataContext DCSource,
DBDataContext DCDest,
int CustomerID)
{
Customer customer;
using (DCSource = new DBDataContext(SourceConnStr))
{
customer = DCSource.Customers
.Where(c => c.CustomerID == CustomerID)
.Single();
}
using (DCDest = new DBDataContext(DestConnStr))
{
DCDest.Customers.InsertOnSubmit(customer);
DCDest.SubmitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但是由于显而易见的原因,这会引发消息异常:
已尝试附加或添加非新的实体,可能已从另一个DataContext加载.这不受支持.
我可以通过像这样对象的浅拷贝来解决这个问题:
public static Customer Clone(this Customer customer)
{
return new Customer()
{
Name = customer.Name,
Email = customer.Email
etc...
};
}
Run Code Online (Sandbox Code Playgroud)
然后插入克隆的项目.如果我只复制有问题的字段,而不是任何表示表关系的引用,这可以正常工作.然而,它有点啰嗦,我正在做的方式需要我手动分配克隆方法中的每个字段.任何人都可以建议任何使这更容易的方法吗?我想知道的两件事是:
非常感谢!
这纯粹是一种学术活动吗?
如果不是,我会认真考虑使用 Microsoft SSIS: http: //msdn.microsoft.com/en-us/library/ms141026.aspx,或者失败的 Rhino ETL:http://ayende.com/Blog/archive/ 2008/01/16/Rhino-ETL-2.0.aspx用于在数据库之间传输数据。[链接文本][1]
| 归档时间: |
|
| 查看次数: |
6802 次 |
| 最近记录: |