Учитывая две базы данных идентичной схемы, есть ли какой-нибудь простой способ переносить записи между ними? Я использую 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();
}
}
Но по понятным причинам это вызывает исключение с сообщением:
Была предпринята попытка присоединить или добавить объект, который не является новым, возможно, был загружен из другого DataContext. Это не поддерживается.
Я могу обойти это, сделав мелкую копию объекта следующим образом:
public static Customer Clone(this Customer customer)
{
return new Customer()
{
Name = customer.Name,
Email = customer.Email
etc...
};
}
и вставка клонированного элемента. Если я только скопирую рассматриваемые поля, а не какие-либо ссылки, представляющие отношения таблиц, это работает нормально. Однако это немного скучно, и для того, чтобы сделать это, мне нужно вручную назначить каждое поле в методе Clone. Кто-нибудь может предложить какие-либо способы сделать это проще? Я хотел бы знать две вещи:
- Может ли LINQ to SQL сделать это проще,
- Есть ли хороший способ использования Reflection для создания мелкой копии, которая будет вставлена?
Большое спасибо!