internal static MetadataWorkspace CreateTransientMetadataWorkspace( IList <EntitySet> sourceEntitySets, Version targetEntityFrameworkVersion, string providerInvariantName, string providerManifestToken, DbProviderManifest providerManifest) { Debug.Assert(sourceEntitySets != null, "sourceEntitySets != null"); Debug.Assert(targetEntityFrameworkVersion != null, "targetEntityFrameworkVersion != null"); Debug.Assert(!string.IsNullOrWhiteSpace(providerInvariantName), "invalid providerInvariantName"); Debug.Assert(!string.IsNullOrWhiteSpace(providerManifestToken), "invalid providerManifestToken"); Debug.Assert(providerManifest != null, "providerManifest != null"); var targetDoubleEntityFrameworkVersion = EntityFrameworkVersion.VersionToDouble(targetEntityFrameworkVersion); var storeModel = EdmModel.CreateStoreModel( EntityContainer.Create( StoreContainerName, DataSpace.SSpace, sourceEntitySets, Enumerable.Empty <EdmFunction>(), null), new DbProviderInfo(providerInvariantName, providerManifestToken), providerManifest, targetDoubleEntityFrameworkVersion); foreach (var entityType in sourceEntitySets.Select(e => e.ElementType)) { storeModel.AddItem(entityType); } var storeItemCollection = new StoreItemCollection(storeModel); var edmItemCollection = new EdmItemCollection( EdmModel.CreateConceptualModel( EntityContainer.Create( ModelContainerName, DataSpace.CSpace, Enumerable.Empty <EntitySet>(), Enumerable.Empty <EdmFunction>(), null), targetDoubleEntityFrameworkVersion)); var msl = string.Format( CultureInfo.InvariantCulture, MslTemplate, SchemaManager.GetMSLNamespaceName(targetEntityFrameworkVersion)); StorageMappingItemCollection mappingItemCollection; using (var stringReader = new StringReader(msl)) { using (var reader = XmlReader.Create(stringReader)) { mappingItemCollection = new StorageMappingItemCollection(edmItemCollection, storeItemCollection, new[] { reader }); } } return(new MetadataWorkspace( () => edmItemCollection, () => storeItemCollection, () => mappingItemCollection)); }