0

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.

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 Answer 1

1

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).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.