示例#1
0
        public void OptimizeEdmx(string inputPath)
        {
            DebugCheck.NotEmpty(inputPath);

            var baseFileName = Path.GetFileNameWithoutExtension(inputPath);

            try
            {
                var selectedItem   = _package.DTE2.SelectedItems.Item(1);
                var project        = selectedItem.ProjectItem.ContainingProject;
                var languageOption = project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageCSharp
                    ? LanguageOption.GenerateCSharpCode
                    : LanguageOption.GenerateVBCode;
                var edmxUtility = new EdmxUtility(inputPath);

                var ef6Reference = ((VSProject)project.Object).References.Cast <Reference>().FirstOrDefault(
                    r => r.Name.EqualsIgnoreCase("EntityFramework") &&
                    Version.Parse(r.Version) >= new Version(6, 0) &&
                    r.PublicKeyToken.EqualsIgnoreCase("b77a5c561934e089"));

                if (ef6Reference == null)
                {
                    var mappingCollection = edmxUtility.GetMappingCollection();

                    OptimizeContextEF5(languageOption, baseFileName, mappingCollection, selectedItem);
                }
                else
                {
                    var          typeService = _package.GetService <DynamicTypeService>();
                    var          solution    = _package.GetService <SVsSolution, IVsSolution>();
                    IVsHierarchy hierarchy;
                    solution.GetProjectOfUniqueName(project.UniqueName, out hierarchy);
                    var typeResolutionService = typeService.GetTypeResolutionService(hierarchy);
                    var ef6Assembly           = typeResolutionService.GetAssembly(
                        new AssemblyName {
                        Name = ef6Reference.Name, Version = new Version(ef6Reference.Version)
                    });

                    if (ef6Assembly != null)
                    {
                        string containerName;
                        var    mappingCollection = edmxUtility.GetMappingCollectionEF6(ef6Assembly, out containerName);
                        var    contextTypeName   = selectedItem.ProjectItem.GetDefaultNamespace() + "." + containerName;

                        OptimizeContextEF6(languageOption, baseFileName, mappingCollection, selectedItem, contextTypeName);
                    }
                    else
                    {
                        var mappingCollection = edmxUtility.GetMappingCollection();

                        OptimizeContextEF5(languageOption, baseFileName, mappingCollection, selectedItem);
                    }
                }
            }
            catch (Exception ex)
            {
                _package.LogError(Strings.Optimize_EdmxError(baseFileName), ex);
            }
        }
        public void OptimizeEdmx(string inputPath)
        {
            DebugCheck.NotEmpty(inputPath);

            var baseFileName = Path.GetFileNameWithoutExtension(inputPath);

            try
            {
                var project        = _package.DTE2.SelectedItems.Item(1).ProjectItem.ContainingProject;
                var languageOption = project.CodeModel.Language == CodeModelLanguageConstants.vsCMLanguageCSharp
                    ? LanguageOption.GenerateCSharpCode
                    : LanguageOption.GenerateVBCode;
                var mappingCollection = new EdmxUtility(inputPath).GetMappingCollection();

                OptimizeContextCore(languageOption, baseFileName, mappingCollection);
            }
            catch (Exception ex)
            {
                _package.LogError(Strings.Optimize_EdmxError(baseFileName), ex);
            }
        }