/// <remarks>Internal for testing.</remarks> internal static void RetargetWithMetadataConverter(XDocument xdoc, Version targetSchemaVersion, MetadataConverterDriver converter) { Debug.Assert(xdoc != null, "xdoc != null"); Debug.Assert(EntityFrameworkVersion.IsValidVersion(targetSchemaVersion), "invalid target schema version"); var inputXml = new XmlDocument { PreserveWhitespace = true }; using (var reader = xdoc.CreateReader()) { inputXml.Load(reader); } var outputXml = converter.Convert(inputXml, targetSchemaVersion); if (outputXml != null) { // Dev10 Bug 550594: There is a bug in XmlEditor that prevents from deleting the root node // unless the root node has previous sibling (like a comment or Xml declaration). if (xdoc.Root.PreviousNode == null) { xdoc.Root.AddBeforeSelf(new XComment("")); } // update xml document with new root element xdoc.Root.Remove(); using (var reader = new XmlNodeReader(outputXml)) { var newDoc = XDocument.Load(reader); xdoc.Add(newDoc.Root); } // Do not reload artifact here // Until the transaction is commited, the XLinq representation of the parsed xml tree hasn't been generated yet. } }