internal override void SaveModelAndDiagram( SerializationResult serializationResult, EntityDesignerViewModel modelRoot, string modelFileName, EntityDesignerDiagram diagram, string diagramFileName, Encoding encoding, bool writeOptionalPropertiesWithDefaultValue) { // only save the model base.SaveModel(serializationResult, modelRoot, modelFileName, encoding, writeOptionalPropertiesWithDefaultValue); if (!serializationResult.Failed) { // flip our dirty bit (as long as we aren't trying to save the auto-recovery backup file) var artifact = EditingContextManager.GetArtifact(modelRoot.EditingContext); Debug.Assert(artifact != null, "Failed to get a valid EFArtifact from the context"); IEntityDesignDocData docData = null; var fileName = String.Empty; if (artifact != null) { fileName = artifact.Uri.LocalPath; } docData = VSHelpers.GetDocData(PackageManager.Package, fileName) as IEntityDesignDocData; Debug.Assert(docData != null, "Couldn't locate our DocData"); if (artifact != null && docData != null && !string.Equals(docData.BackupFileName, modelFileName, StringComparison.OrdinalIgnoreCase)) { artifact.IsDirty = false; } // SaveDiagram file if the file exists // TODO: What happened if saving diagram file failed? Should we rollback the model file? var diagramDocData = VSHelpers.GetDocData(PackageManager.Package, fileName + EntityDesignArtifact.ExtensionDiagram) as XmlModelDocData; if (diagramDocData != null) { int saveIsCancelled; diagramDocData.SaveDocData(VSSAVEFLAGS.VSSAVE_SilentSave, out diagramFileName, out saveIsCancelled); } } }
internal override MemoryStream InternalSaveModel( SerializationResult serializationResult, EntityDesignerViewModel modelRoot, string fileName, Encoding encoding, bool writeOptionalPropertiesWithDefaultValue) { IEntityDesignDocData docData = null; MemoryStream stream = null; Debug.Assert(modelRoot.EditingContext != null, "Designer model root has a null EditingContext"); if (modelRoot.EditingContext != null) { // find our doc data; don't use the passed in fileName as this will be the new name // during a SaveAs operation var artifact = EditingContextManager.GetArtifact(modelRoot.EditingContext); if (artifact != null) { docData = VSHelpers.GetDocData(PackageManager.Package, artifact.Uri.LocalPath) as IEntityDesignDocData; } Debug.Assert(docData != null, "Couldn't locate our DocData"); if (docData != null) { var text = docData.GetBufferTextForSaving(); if (!string.IsNullOrEmpty(text)) { stream = FileUtils.StringToStream(text, encoding) as MemoryStream; } } } // if we don't have a stream, then we couldn't serialize for some reason if (stream == null) { serializationResult.Failed = true; } return(stream); }