/// <summary> /// Generate views from the given EDMX TextReader /// </summary> /// <param name="edmxReader">TextReader providing the EDMX XML</param> /// <param name="languageOption">C# or VB</param> /// <param name="viewsWriter">TextWriter that the views will be written into. If null, only validation will be performed.</param> /// <returns>List of errors that occurred while building the mapping or while validating/generating</returns> public static IList<EdmSchemaError> GenerateViewsFromEdmx(TextReader edmxReader, LanguageOption languageOption, TextWriter viewsWriter) { List<EdmSchemaError> allErrors = null; StorageMappingItemCollection mappingItemCollection = EdmMapping.BuildMapping(edmxReader, out allErrors); // generate views & write them out to a file var evg = new EntityViewGenerator(languageOption); var viewGenerationErrors = evg.GenerateViews(mappingItemCollection, viewsWriter); if (viewGenerationErrors != null) allErrors.AddRange(viewGenerationErrors); return allErrors; }
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; } }
private static void ValidateAndGenerateViews(FileInfo edmxFile, LanguageOption languageOption, bool generateViews) { XDocument doc = XDocument.Load(edmxFile.FullName); XElement c = GetCsdlFromEdmx(doc); XElement s = GetSsdlFromEdmx(doc); XElement m = GetMslFromEdmx(doc); // 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); viewGenerationErrors = evg.GenerateViews(mappingItemCollection, outputFile); } else { viewGenerationErrors = EntityViewGenerator.Validate(mappingItemCollection); } // write errors WriteErrors(cErrors); WriteErrors(sErrors); WriteErrors(mErrors); WriteErrors(viewGenerationErrors); }
public static bool ValidateAndGenerateViews(String edmxFile, LanguageOption languageOption, bool generateViews, out String viewsOut, out List<Object> errors) { viewsOut = String.Empty; XDocument xdoc = XDocument.Load(edmxFile); 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 EntityViewGenerator evg = new EntityViewGenerator(languageOption); using (var writer = new StringWriter()) { viewGenerationErrors = evg.GenerateViews(mappingItemCollection, writer, v); viewsOut = writer.ToString(); } } else { viewGenerationErrors = EntityViewGenerator.Validate(mappingItemCollection, v); } // write errors errors = new List<Object>(); errors.AddRange(cErrors); errors.AddRange(sErrors); errors.AddRange(mErrors); errors.AddRange(viewGenerationErrors); if (errors.Count > 0) return true; return false; }