views:

14

answers:

1

Hey guys,

I'm trying to use the entity framework to take data (nested relationships) from one DB and insert it into another.

The idea is you download the data as an XML file and then upload it and it gets inserted into the new DB.

The download to XML is 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();

The problem ..is attaching that read XML to another context and saving it to the DB

So far I have the following which reads in the model from XML fine but results in nothing being added to the 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();
}

Any help would be greatly appreciated.

Thanks a bunch, Alex

NOTE Because both these DBs are on the same server the data doesn't HAVE to come down as XML but I imagine the problem would still be the same.

+1  A: 

You're talking about an n-tier situation.

See building n-tier applications with EF and attaching and detaching objects.

Just calling Attach is telling EF that the object did not change.

If it's a new object (e.g., you know it's an insert and not an update operation), then you should call AddObject instead of Attach, and you're done. However, if the XML represents some set of changes to a possibly-existing object, then you have more work to do (see the MSDN pages for details).

Stephen Cleary