internal void Create(bool skipExistsCheck) { using (var clonedObjectContext = _internalContext.CreateObjectContextForDdlOps()) { if (!skipExistsCheck && _internalContext.DatabaseOperations.Exists(clonedObjectContext.ObjectContext)) { throw Error.Database_DatabaseAlreadyExists(_internalContext.Connection.Database); } _internalContext.CreateDatabase(clonedObjectContext.ObjectContext); } }
public DatabaseExistenceState AnyModelTableExists(InternalContext internalContext) { var exists = internalContext.DatabaseOperations.Exists( internalContext.Connection, internalContext.CommandTimeout, new Lazy<StoreItemCollection>(() => CreateStoreItemCollection(internalContext))); if (!exists) { return DatabaseExistenceState.DoesNotExist; } using (var clonedObjectContext = internalContext.CreateObjectContextForDdlOps()) { try { if (internalContext.CodeFirstModel == null) { // If not Code First, then assume tables created in some other way return DatabaseExistenceState.Exists; } var checker = DbConfiguration.DependencyResolver.GetService<TableExistenceChecker>(internalContext.ProviderName); if (checker == null) { // If we can't check for tables, then assume they exist as we did in older versions return DatabaseExistenceState.Exists; } var modelTables = GetModelTables(internalContext).ToList(); if (!modelTables.Any()) { // If this is an empty model, then all tables that can exist (0) do exist return DatabaseExistenceState.Exists; } if (QueryForTableExistence(checker, clonedObjectContext, modelTables)) { // If any table exists, then assume that this is a non-empty database return DatabaseExistenceState.Exists; } // At this point we know no model tables exist. If the history table exists and has an entry // for this context, then treat this as a non-empty database, otherwise treat is as existing // but empty. return internalContext.HasHistoryTableEntry() ? DatabaseExistenceState.Exists : DatabaseExistenceState.ExistsConsideredEmpty; } catch (Exception ex) { Debug.Fail(ex.Message, ex.ToString()); // Revert to previous behavior on error return DatabaseExistenceState.Exists; } } }
private static StoreItemCollection CreateStoreItemCollection(InternalContext internalContext) { using (var clonedObjectContext = internalContext.CreateObjectContextForDdlOps()) { var entityConnection = ((EntityConnection)clonedObjectContext.ObjectContext.Connection); return (StoreItemCollection)entityConnection.GetMetadataWorkspace().GetItemCollection(DataSpace.SSpace); } }
internal void Create(DatabaseExistenceState existenceState) { using (var clonedObjectContext = _internalContext.CreateObjectContextForDdlOps()) { if (existenceState == DatabaseExistenceState.Unknown) { if (_internalContext.DatabaseOperations.Exists(clonedObjectContext.ObjectContext)) { var interceptionContext = new DbInterceptionContext(); interceptionContext = interceptionContext.WithDbContext(_internalContext.Owner); interceptionContext = interceptionContext.WithObjectContext(clonedObjectContext.ObjectContext); throw Error.Database_DatabaseAlreadyExists( DbInterception.Dispatch.Connection.GetDatabase(_internalContext.Connection, interceptionContext)); } existenceState = DatabaseExistenceState.DoesNotExist; } _internalContext.CreateDatabase(clonedObjectContext.ObjectContext, existenceState); } }