public void OptimizeContext(dynamic context)
        {
            Type contextType = context.GetType();

            if (GetEntityFrameworkVersion(contextType) >= new Version(6, 0))
            {
                MessageBox.Show(
                    "Generating views for Entity Framework version 6 is currently not supported.",
                    "Entity Framework Power Tools",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);

                return;
            }

            try
            {
                var selectedItem          = _package.DTE2.SelectedItems.Item(1);
                var selectedItemExtension = (string)selectedItem.ProjectItem.Properties.Item("Extension").Value;
                var languageOption        = selectedItemExtension == FileExtensions.CSharp
                    ? LanguageOption.GenerateCSharpCode
                    : LanguageOption.GenerateVBCode;
                var objectContext     = DbContextPackage.GetObjectContext(context);
                var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);

                OptimizeContextCore(languageOption, contextType.Name, mappingCollection);
            }
            catch (Exception ex)
            {
                _package.LogError(Strings.Optimize_ContextError(contextType.Name), ex);
            }
        }
示例#2
0
        public void ViewDdl(dynamic context)
        {
            Type contextType = context.GetType();

            try
            {
                var filePath = Path.Combine(
                    Path.GetTempPath(),
                    contextType.Name + FileExtensions.Sql);

                if (File.Exists(filePath))
                {
                    File.SetAttributes(filePath, FileAttributes.Normal);
                }

                var objectContext = DbContextPackage.GetObjectContext(context);

                File.WriteAllText(filePath, objectContext.CreateDatabaseScript());
                File.SetAttributes(filePath, FileAttributes.ReadOnly);

                _package.DTE2.ItemOperations.OpenFile(filePath);
            }
            catch (Exception exception)
            {
                _package.LogError(Strings.ViewDdlError(contextType.Name), exception);
            }
        }
        private Version GetEntityFrameworkVersion(DbContextPackage package, Project project)
        {
            var vsProject = (VSLangProj.VSProject)project.Object;
            var entityFrameworkReference = vsProject.References.Cast <VSLangProj.Reference>().FirstOrDefault(r => r.Name == "EntityFramework");

            if (entityFrameworkReference == null)
            {
                // Add EF References
                package.LogInfo(Strings.ReverseEngineer_InstallEntityFramework);

                try
                {
                    project.InstallPackage("EntityFramework");
                }
                catch (Exception ex)
                {
                    entityFrameworkReference = vsProject.References.Cast <VSLangProj.Reference>().FirstOrDefault(r => r.Name == "EntityFramework");
                    if (entityFrameworkReference == null)
                    {
                        package.LogError(Strings.ReverseEngineer_InstallEntityFrameworkError, ex);
                        throw new Exception("安装EF出错!");
                    }
                }
            }

            return(new Version(entityFrameworkReference.Version));
        }
示例#4
0
        public void OptimizeContext(dynamic context)
        {
            Type contextType = context.GetType();

            try
            {
                var selectedItem          = _package.DTE2.SelectedItems.Item(1);
                var selectedItemExtension = (string)selectedItem.ProjectItem.Properties.Item("Extension").Value;
                var languageOption        = selectedItemExtension == FileExtensions.CSharp
                    ? LanguageOption.GenerateCSharpCode
                    : LanguageOption.GenerateVBCode;
                var objectContext = DbContextPackage.GetObjectContext(context);
                var baseFileName  = contextType.Name;

                if (GetEntityFrameworkVersion(contextType) < new Version(6, 0))
                {
                    var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);

                    OptimizeContextEF5(languageOption, baseFileName, mappingCollection, selectedItem);
                }
                else
                {
                    var metadataWorkspace = objectContext.MetadataWorkspace;
                    var getItemCollection = ((Type)metadataWorkspace.GetType()).GetMethod("GetItemCollection");
                    var dataSpace         = getItemCollection.GetParameters().First().ParameterType;
                    var mappingCollection = getItemCollection.Invoke(
                        metadataWorkspace,
                        new[] { Enum.Parse(dataSpace, "CSSpace") });

                    OptimizeContextEF6(
                        languageOption,
                        baseFileName,
                        mappingCollection,
                        selectedItem,
                        contextType.FullName);
                }
            }
            catch (Exception ex)
            {
                _package.LogError(Strings.Optimize_ContextError(contextType.Name), ex);
            }
        }
        public AddCustomTemplatesHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
        public ReverseEngineerCodeFirstHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
示例#7
0
        public ViewDdlHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
示例#8
0
        public AddCustomTemplatesHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
        public ReverseEngineerCodeFirstHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
示例#10
0
        public OptimizeContextHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
        public AddCustomTemplatesHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
        public ReverseEngineerCodeFirstHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            this.package = package;
        }
示例#13
0
        public OptimizeContextHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
示例#14
0
        public ViewContextHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }
        public ReverseEngineerCodeFirstHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
        public AddCustomTemplatesHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
        public OptimizeContextHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
        public ViewContextHandler(DbContextPackage package)
        {
            DebugCheck.NotNull(package);

            _package = package;
        }
示例#19
0
        public ViewDdlHandler(DbContextPackage package)
        {
            Contract.Requires(package != null);

            _package = package;
        }