public void GetMappingCollection_returns_mapping() { var edmxContents = @"<?xml version='1.0'?> <Edmx Version='3.0' xmlns='http://schemas.microsoft.com/ado/2009/11/edmx'> <Runtime> <ConceptualModels> <Schema Namespace='Model' Alias='Self' annotation:UseStrongSpatialTypes='false' xmlns:annotation='http://schemas.microsoft.com/ado/2009/02/edm/annotation' xmlns='http://schemas.microsoft.com/ado/2009/11/edm'> <EntityContainer Name='DatabaseEntities' annotation:LazyLoadingEnabled='true'> <EntitySet Name='Entities' EntityType='Model.Entity' /> </EntityContainer> <EntityType Name='Entity'> <Key> <PropertyRef Name='Id' /> </Key> <Property Name='Id' Type='Int32' Nullable='false' annotation:StoreGeneratedPattern='Identity' /> </EntityType> </Schema> </ConceptualModels> <Mappings> <Mapping Space='C-S' xmlns='http://schemas.microsoft.com/ado/2009/11/mapping/cs'> <EntityContainerMapping StorageEntityContainer='ModelStoreContainer' CdmEntityContainer='DatabaseEntities'> <EntitySetMapping Name='Entities'> <EntityTypeMapping TypeName='Model.Entity'> <MappingFragment StoreEntitySet='Entities'> <ScalarProperty Name='Id' ColumnName='Id' /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> </EntityContainerMapping> </Mapping> </Mappings> <StorageModels> <Schema Namespace='Model.Store' Alias='Self' Provider='System.Data.SqlClient' ProviderManifestToken='2008' xmlns:store='http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator' xmlns='http://schemas.microsoft.com/ado/2009/11/edm/ssdl'> <EntityContainer Name='ModelStoreContainer'> <EntitySet Name='Entities' EntityType='Model.Store.Entities' store:Type='Tables' Schema='dbo' /> </EntityContainer> <EntityType Name='Entities'> <Key> <PropertyRef Name='Id' /> </Key> <Property Name='Id' Type='int' Nullable='false' StoreGeneratedPattern='Identity' /> </EntityType> </Schema> </StorageModels> </Runtime> </Edmx>"; StorageMappingItemCollection mappingCollection; using (var edmx = new TempFile(edmxContents)) { mappingCollection = new EdmxUtility(edmx.FileName) .GetMappingCollection(); } Assert.True(mappingCollection.Contains("DatabaseEntities")); }
public void GetMappingCollection_returns_mapping_for_v2_schema() { var edmxContents = @"<?xml version='1.0' ?> <Edmx Version='2.0' xmlns='http://schemas.microsoft.com/ado/2008/10/edmx'> <Runtime> <ConceptualModels> <Schema Namespace='Model' Alias='Self' xmlns:annotation='http://schemas.microsoft.com/ado/2009/02/edm/annotation' xmlns='http://schemas.microsoft.com/ado/2008/09/edm'> <EntityContainer Name='DatabaseEntities' annotation:LazyLoadingEnabled='true'> <EntitySet Name='Entities' EntityType='Model.Entity' /> </EntityContainer> <EntityType Name='Entity'> <Key> <PropertyRef Name='Id' /> </Key> <Property Name='Id' Type='Int32' Nullable='false' annotation:StoreGeneratedPattern='Identity' /> </EntityType> </Schema> </ConceptualModels> <Mappings> <Mapping Space='C-S' xmlns='http://schemas.microsoft.com/ado/2008/09/mapping/cs'> <EntityContainerMapping StorageEntityContainer='ModelStoreContainer' CdmEntityContainer='DatabaseEntities'> <EntitySetMapping Name='Entities'> <EntityTypeMapping TypeName='Model.Entity'> <MappingFragment StoreEntitySet='Entities'> <ScalarProperty Name='Id' ColumnName='Id' /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> </EntityContainerMapping> </Mapping> </Mappings> <StorageModels> <Schema Namespace='Model.Store' Alias='Self' Provider='System.Data.SqlClient' ProviderManifestToken='2008' xmlns:store='http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator' xmlns='http://schemas.microsoft.com/ado/2009/02/edm/ssdl'> <EntityContainer Name='ModelStoreContainer'> <EntitySet Name='Entities' EntityType='Model.Store.Entities' store:Type='Tables' Schema='dbo' /> </EntityContainer> <EntityType Name='Entities'> <Key> <PropertyRef Name='Id' /> </Key> <Property Name='Id' Type='int' Nullable='false' StoreGeneratedPattern='Identity' /> </EntityType> </Schema> </StorageModels> </Runtime> </Edmx>"; StorageMappingItemCollection mappingCollection; using (var edmx = new TempFile(edmxContents)) { mappingCollection = new EdmxUtility(edmx.FileName) .GetMappingCollection(); } Assert.True(mappingCollection.Contains("DatabaseEntities")); }
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); } }
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) }); string containerName; var mappingCollection = edmxUtility.GetMappingCollectionEF6(ef6Assembly, out containerName); var contextTypeName = selectedItem.ProjectItem.GetDefaultNamespace() + "." + containerName; OptimizeContextEF6(languageOption, baseFileName, mappingCollection, selectedItem, contextTypeName); } } catch (Exception ex) { _package.LogError(Strings.Optimize_EdmxError(baseFileName), ex); } }