2010-07-22 9 views
0

J'essaie d'utiliser l'infrastructure d'entité pour prendre des données (relations imbriquées) à partir d'une BD et l'insérer dans une autre. L'idée est de télécharger les données sous forme de fichier XML, puis de les télécharger et de les insérer dans le nouveau BD.Copie de données dans des bases de données avec Entity Framework

Le téléchargement de XML est simple:

var BoroughQuery = from b in Context.Borough.Include("User").Include("Location").Include("Contact").Include("Location.LocationContact") where b.Id == BoroughId select b; 

BoroughModel = BoroughQuery.First(); 

Context.Detach(BoroughModel); 

System.Runtime.Serialization.DataContractSerializer ser = new System.Runtime.Serialization.DataContractSerializer(typeof(Borough)); 
System.IO.DirectoryInfo TempDirectory = new System.IO.DirectoryInfo(Server.MapPath(Request.ApplicationPath + "Temp")); 
if (!TempDirectory.Exists) TempDirectory.Create(); 
System.IO.FileInfo TempFile = new System.IO.FileInfo(TempDirectory.FullName + "\\" + BoroughModel.Key + "_" + System.DateTime.UtcNow.ToString("yyyyMMddhhmmss") + ".xml"); 
FileStream writer = new FileStream(TempFile.FullName, FileMode.Create); 
ser.WriteObject(writer, BoroughModel); 
writer.Close(); 

Le problème ..est fixation qui lisent XML à un autre contexte et la sauvegarde à la DB

Jusqu'à présent, je donne les résultats suivants qui lit dans le modèle de XML très bien, mais il n'y a rien à ajouter à la db:

DataContractSerializer ser = new DataContractSerializer(typeof(Borough)); 
Borough deserializedBorough = (Borough)ser.ReadObject(fleBoroughUpload.FileContent); 

using (Entities Context = new Entities("name=EntitiesTarget")) 
{ 
    Context.Attach(deserializedBorough); 
    Context.SaveChanges(); 
} 

Toute aide serait grandement apprécié.

NOTE Parce que ces deux blocs de données sont sur le même serveur les données et ne pas descendre en XML, mais j'imagine que le problème serait toujours le même.

Répondre

1

Vous parlez d'une situation n-tier.

Voir building n-tier applications with EF et attaching and detaching objects. Appeler Attach indique à EF que l'objet n'a pas changé.

Si c'est un nouvel objet (par exemple, vous savez c'est un insert et pas une opération de mise à jour), alors vous devriez appeler AddObject au lieu de Attach, et vous avez terminé. Toutefois, si le code XML représente un certain nombre de modifications apportées à un objet existant, vous devez effectuer plus de travail (voir les pages MSDN pour plus de détails).