private static void ValidateAndGenerateViews(FileInfo edmxFile, LanguageOption languageOption, bool generateViews) { XDocument xdoc = XDocument.Load(edmxFile.FullName); XElement c = GetCsdlFromEdmx(xdoc); XElement s = GetSsdlFromEdmx(xdoc); XElement m = GetMslFromEdmx(xdoc); Version v = _namespaceManager.GetVersionFromEDMXDocument(xdoc); // load the csdl XmlReader[] cReaders = { c.CreateReader() }; IList <EdmSchemaError> cErrors = null; EdmItemCollection edmItemCollection = MetadataItemCollectionFactory.CreateEdmItemCollection(cReaders, out cErrors); // load the ssdl XmlReader[] sReaders = { s.CreateReader() }; IList <EdmSchemaError> sErrors = null; StoreItemCollection storeItemCollection = MetadataItemCollectionFactory.CreateStoreItemCollection(sReaders, out sErrors); // load the msl XmlReader[] mReaders = { m.CreateReader() }; IList <EdmSchemaError> mErrors = null; StorageMappingItemCollection mappingItemCollection = MetadataItemCollectionFactory.CreateStorageMappingItemCollection( edmItemCollection, storeItemCollection, mReaders, out mErrors); // either pre-compile views or validate the mappings IList <EdmSchemaError> viewGenerationErrors = null; if (generateViews) { // generate views & write them out to a file string outputFile = GetFileNameWithNewExtension(edmxFile, ".GeneratedViews" + GetFileExtensionForLanguageOption(languageOption)); EntityViewGenerator evg = new EntityViewGenerator(languageOption); using (var file = File.OpenWrite(outputFile)) { using (var writer = new StreamWriter(file)) { viewGenerationErrors = evg.GenerateViews(mappingItemCollection, writer, v); } } } else { viewGenerationErrors = EntityViewGenerator.Validate(mappingItemCollection, v); } // write errors WriteErrors(cErrors); WriteErrors(sErrors); WriteErrors(mErrors); WriteErrors(viewGenerationErrors); }
private void InitializeSettings() { Classes = new EntityClassGenerator(LanguageOption.GenerateCSharpCode); Code = new EntityCodeGenerator(LanguageOption.GenerateCSharpCode); Views = new EntityViewGenerator(LanguageOption.GenerateCSharpCode); Store = new EntityStoreSchemaGenerator(providerInvariantName, connectionString, "ShoppingModelStore"); Store.GenerateForeignKeyProperties = true; }
private void OptimizeContextEF5( LanguageOption languageOption, string baseFileName, StorageMappingItemCollection mappingCollection, SelectedItem selectedItem) { DebugCheck.NotEmpty(baseFileName); DebugCheck.NotNull(mappingCollection); OptimizeContextCore( languageOption, baseFileName, selectedItem, viewsPath => { var viewGenerator = new EntityViewGenerator(languageOption); var errors = viewGenerator.GenerateViews(mappingCollection, viewsPath); errors.HandleErrors(Strings.Optimize_SchemaError(baseFileName)); }); }
private void OptimizeContextCore(LanguageOption languageOption, string baseFileName, StorageMappingItemCollection mappingCollection) { DebugCheck.NotEmpty(baseFileName); DebugCheck.NotNull(mappingCollection); var progressTimer = new Timer { Interval = 1000 }; try { var selectedItem = _package.DTE2.SelectedItems.Item(1); var selectedItemPath = (string)selectedItem.ProjectItem.Properties.Item("FullPath").Value; var viewGenerator = new EntityViewGenerator(languageOption); var viewsFileName = baseFileName + ".Views" + ((languageOption == LanguageOption.GenerateCSharpCode) ? FileExtensions.CSharp : FileExtensions.VisualBasic); var viewsPath = Path.Combine( Path.GetDirectoryName(selectedItemPath), viewsFileName); _package.DTE2.SourceControl.CheckOutItemIfNeeded(viewsPath); var progress = 1; progressTimer.Tick += (sender, e) => { _package.DTE2.StatusBar.Progress(true, string.Empty, progress, 100); progress = progress == 100 ? 1 : progress + 1; _package.DTE2.StatusBar.Text = Strings.Optimize_Begin(baseFileName); }; progressTimer.Start(); Task.Factory.StartNew( () => { var errors = viewGenerator.GenerateViews(mappingCollection, viewsPath); errors.HandleErrors(Strings.Optimize_SchemaError(baseFileName)); }) .ContinueWith( t => { progressTimer.Stop(); _package.DTE2.StatusBar.Progress(false); if (t.IsFaulted) { _package.LogError(Strings.Optimize_Error(baseFileName), t.Exception); return; } selectedItem.ProjectItem.ContainingProject.ProjectItems.AddFromFile(viewsPath); _package.DTE2.ItemOperations.OpenFile(viewsPath); _package.DTE2.StatusBar.Text = Strings.Optimize_End(baseFileName, Path.GetFileName(viewsPath)); }, TaskScheduler.FromCurrentSynchronizationContext()); } catch { progressTimer.Stop(); _package.DTE2.StatusBar.Progress(false); throw; } }