internal EntityConnection( MetadataWorkspace workspace, DbConnection connection, bool skipInitialization, bool entityConnectionOwnsStoreConnection) { if (!skipInitialization) { if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace((object)"EdmItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.SSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace((object)"StoreItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace((object)"StorageMappingItemCollection")); } if (connection.GetProviderFactory() == null) { throw new ProviderIncompatibleException(Strings.EntityClient_DbConnectionHasNoProvider((object)connection)); } this._providerFactory = ((StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace)).ProviderFactory; this._initialized = true; } this._metadataWorkspace = workspace; this._storeConnection = connection; this._entityConnectionOwnsStoreConnection = entityConnectionOwnsStoreConnection; if (this._storeConnection != null) { this._entityClientConnectionState = DbInterception.Dispatch.Connection.GetState(this._storeConnection, this.InterceptionContext); } this.SubscribeToStoreConnectionStateChangeEvents(); }
// <summary> // This constructor allows to skip the initialization code for testing purposes. // </summary> internal EntityConnection( MetadataWorkspace workspace, DbConnection connection, bool skipInitialization, bool entityConnectionOwnsStoreConnection) { if (!skipInitialization) { if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("EdmItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.SSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StoreItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSSpace)) { throw new ArgumentException( Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StorageMappingItemCollection")); } // Verify that a factory can be retrieved var providerFactory = connection.GetProviderFactory(); if (providerFactory == null) { throw new ProviderIncompatibleException(Strings.EntityClient_DbConnectionHasNoProvider(connection)); } var collection = (StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace); _providerFactory = collection.ProviderFactory; Debug.Assert(_providerFactory == providerFactory); _initialized = true; } _metadataWorkspace = workspace; _storeConnection = connection; _entityConnectionOwnsStoreConnection = entityConnectionOwnsStoreConnection; if (_storeConnection != null) { _entityClientConnectionState = DbInterception.Dispatch.Connection.GetState(_storeConnection, InterceptionContext); } SubscribeToStoreConnectionStateChangeEvents(); }
private static void LoadStoreItemCollections(MetadataWorkspace workspace, DbConnection storeConnection, DbProviderFactory factory, DbConnectionOptions connectionOptions, EdmItemCollection edmItemCollection, MetadataArtifactLoader artifactLoader) { Debug.Assert(workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSpace), "C-Space must be loaded before loading S or C-S space"); // The provider connection string is optional; if it has not been specified, // we pick up the store's connection string. // string providerConnectionString = connectionOptions[EntityConnectionStringBuilder.ProviderConnectionStringParameterName]; if (string.IsNullOrEmpty(providerConnectionString) && (storeConnection != null)) { providerConnectionString = storeConnection.ConnectionString; } // Build a string as the key and look up the MetadataCache for a match string storeCacheKey = CreateMetadataCacheKey(artifactLoader.GetOriginalPaths(), connectionOptions[EntityConnectionStringBuilder.ProviderParameterName], providerConnectionString); // Load store metadata. object entryToken; StorageMappingItemCollection mappingCollection = MetadataCache.GetOrCreateStoreAndMappingItemCollections(storeCacheKey, artifactLoader, edmItemCollection, out entryToken); workspace.RegisterItemCollection(mappingCollection.StoreItemCollection); workspace.RegisterItemCollection(mappingCollection); // Adding the store metadata entry token to the workspace workspace.AddMetadataEntryToken(entryToken); }
/// <summary> /// Constructs the EntityConnection from Metadata loaded in memory /// </summary> /// <param name="workspace">Workspace containing metadata information.</param> public EntityConnection(MetadataWorkspace workspace, DbConnection connection) { GC.SuppressFinalize(this); EntityUtil.CheckArgumentNull(workspace, "workspace"); EntityUtil.CheckArgumentNull(connection, "connection"); if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSpace)) { throw EntityUtil.Argument(System.Data.Entity.Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("EdmItemCollection")); } if(!workspace.IsItemCollectionAlreadyRegistered(DataSpace.SSpace)) { throw EntityUtil.Argument(System.Data.Entity.Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StoreItemCollection")); } if(!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSSpace)) { throw EntityUtil.Argument(System.Data.Entity.Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StorageMappingItemCollection")); } if (connection.State != ConnectionState.Closed) { throw EntityUtil.Argument(System.Data.Entity.Strings.EntityClient_ConnectionMustBeClosed); } // Verify that a factory can be retrieved if (DbProviderFactories.GetFactory(connection) == null) { throw EntityUtil.ProviderIncompatible(System.Data.Entity.Strings.EntityClient_DbConnectionHasNoProvider(connection)); } StoreItemCollection collection = (StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace); _providerFactory = collection.StoreProviderFactory; _storeConnection = connection; _userOwnsStoreConnection = true; _metadataWorkspace = workspace; _initialized = true; }
/// <summary> /// This constructor allows to skip the initialization code for testing purposes. /// </summary> internal EntityConnection(MetadataWorkspace workspace, DbConnection connection, bool skipInitialization) { if (!skipInitialization) { if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("EdmItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.SSpace)) { throw new ArgumentException(Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StoreItemCollection")); } if (!workspace.IsItemCollectionAlreadyRegistered(DataSpace.CSSpace)) { throw new ArgumentException( Strings.EntityClient_ItemCollectionsNotRegisteredInWorkspace("StorageMappingItemCollection")); } if (connection.State != ConnectionState.Closed) { throw new ArgumentException(Strings.EntityClient_ConnectionMustBeClosed); } // Verify that a factory can be retrieved if (DbProviderFactories.GetFactory(connection) == null) { throw new ProviderIncompatibleException(Strings.EntityClient_DbConnectionHasNoProvider(connection)); } var collection = (StoreItemCollection)workspace.GetItemCollection(DataSpace.SSpace); _providerFactory = collection.StoreProviderFactory; _userOwnsStoreConnection = true; _initialized = true; } _metadataWorkspace = workspace; _storeConnection = connection; }