gpt4 book ai didi

c# - 使用 LINQ to SQL 在数据库之间复制

转载 作者:太空狗 更新时间:2023-10-29 17:54:26 30 4
gpt4 key购买 nike

给定两个模式相同的数据库,是否有任何简单的方法可以在两者之间传输记录?我正在使用 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();
}
}

但出于显而易见的原因,这会引发异常消息:

An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.

我可以通过像这样对对象进行浅拷贝来解决这个问题:

public static Customer Clone(this Customer customer)
{
return new Customer()
{
Name = customer.Name,
Email = customer.Email
etc...
};
}

然后插入克隆的项目。如果我只复制有问题的字段,而不是任何表示表关系的引用,这就可以正常工作。然而,它有点啰嗦,我这样做的方式需要我手动分配 Clone 方法中的每个字段。谁能建议任何使这更容易的方法?我想知道的两件事是:

  1. LINQ to SQL 能否以更简单的方式执行此操作,
  2. 有没有一种使用反射来制作将插入的浅拷贝的好方法?

非常感谢!

最佳答案

这是一种浅克隆 LINQ 对象的方法(省略主键):Copy Linq Objects .

如果您不使用属性,可以调整为使用元模型。那么您只需要 2 个数据上下文(一个源,一个目标)。

或者,您可以查看 SqlBulkCopy - 参见 Copy from one database table to another C#

关于c# - 使用 LINQ to SQL 在数据库之间复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/868063/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com