Example #1
0
        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;
        }
Example #3
0
        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;
            }
        }