public override int OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, IVsWindowFrame pFrame) { if (fFirstShow != 0) { if (pFrame != null) { var frameWrapper = new EntityDesignFrameWrapper(pFrame); if (frameWrapper.IsEscherDocInXmlEditor) { // we have an EDMX file that is being opened in the XML editor so we want to validate // so users can fix up safe-mode errors or even non-safe mode errors VisualStudioEdmxValidator.LoadAndValidateFiles(frameWrapper.Uri); } } } return(NativeMethods.S_OK); }
internal static void GenerateDatabaseScriptFromModel(EntityDesignArtifact artifact) { VsUtils.EnsureProvider(artifact); var project = VSHelpers.GetProjectForDocument(artifact.Uri.LocalPath, PackageManager.Package); var sp = Services.ServiceProvider; ModelBuilderWizardForm form; ModelBuilderWizardForm.WizardMode startMode; ModelBuilderSettings settings; // Start the hourglass, especially because we'll be incurring a perf hit from validating using (new VsUtils.HourglassHelper()) { // Before running the Generate Database wizard, we have to make sure that the C-Side validates VisualStudioEdmxValidator.LoadAndValidateFiles(artifact.Uri); if ( artifact.ArtifactSet.GetAllErrors() .Count(ei => ei.ErrorClass == ErrorClass.Runtime_CSDL || ei.ErrorClass == ErrorClass.Escher_CSDL) > 0) { VsUtils.ShowErrorDialog(Resources.DatabaseCreation_ValidationFailed); return; } // set up ModelBuilderSettings settings = SetupSettingsAndModeForDbPages( sp, project, artifact, false, ModelBuilderWizardForm.WizardMode.PerformDatabaseConfigAndDBGenSummary, ModelBuilderWizardForm.WizardMode.PerformDBGenSummaryOnly, out startMode); form = new ModelBuilderWizardForm(sp, settings, startMode); } var originalSchemaVersion = settings.TargetSchemaVersion; try { // start the ModelBuilderWizardForm; this will start the workflow in another thread. form.Start(); } catch (Exception e) { VsUtils.ShowErrorDialog( String.Format( CultureInfo.CurrentCulture, Resources.ModelObjectItemWizard_UnexpectedExceptionHasOccurred, e.Message)); return; } // if Wizard was cancelled or the user hit 'X' to close window // no need for any further action if (form.WizardCancelled || !form.WizardFinished) { return; } // If database was configured, add DbContext templates if (startMode == ModelBuilderWizardForm.WizardMode.PerformDatabaseConfigAndDBGenSummary) { var edmxItem = VsUtils.GetProjectItemForDocument(artifact.Uri.LocalPath, sp); new DbContextCodeGenerator().AddDbContextTemplates(edmxItem, settings.UseLegacyProvider); // We need to reload the artifact if we updated the edmx as part of generating // model from the database. if (settings.TargetSchemaVersion != originalSchemaVersion) { artifact.ReloadArtifact(); } } }