Étant donné deux bases de données de schéma identique, existe-t-il un moyen simple de transférer des enregistrements entre les deux? J'utilise LINQ to SQL car j'ai besoin d'effectuer quelques opérations supplémentaires en cours de route et d'avoir des objets représentant les enregistrements que je transfère le rend beaucoup plus facile. Ceci est une application d'aide à petite échelle, donc SSIS est probablement overkill et SQLBulkCopy ne me permet pas d'interroger facilement les objets en cours de route.Utilisation de LINQ to SQL pour copier entre des bases de données
Ce que je voudrais faire est la suivante:
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();
}
}
Mais pour des raisons évidentes, qui déclenche une exception avec le message:
Une tentative a été faite pour attacher ou Ajouter un entité qui n'est pas nouvelle, ayant peut-être été chargée depuis un autre DataContext. Ce n'est pas supporté.
Je peux contourner cela en faisant une copie superficielle de l'objet comme celui-ci:
public static Customer Clone(this Customer customer)
{
return new Customer()
{
Name = customer.Name,
Email = customer.Email
etc...
};
}
puis insérer l'élément cloné. Si je ne fais que copier les champs en question, et non les références représentant les relations de table cela fonctionne très bien. C'est un peu long et la façon dont je le fais a besoin que j'attribue manuellement tous les champs de la méthode Clone. Quelqu'un pourrait-il suggérer des moyens de rendre cela plus facile? Les deux choses que je voudrais savoir sont:
- peut LINQ to SQL faire cela d'une manière plus facile,
- Y at-il un bon moyen d'utiliser la réflexion pour faire une copie peu profonde qui insérera?
Merci beaucoup!
Ce qui est réel, mais il est seulement une application d'aide légère pour moi d'utiliser. Je ne prévois pas de transférer plus de 50 lignes sur plusieurs tables dans chaque lot, donc je pense que SSIS est probablement exagéré. Ma solution actuelle utilisant une méthode clone par objet fonctionne très bien, mais elle semble inélégante. J'ai besoin d'ajouter d'autres tables, donc je voulais trouver un meilleur moyen avant d'écrire plus de méthodes de clones! –