public void AppendHistoryModel_should_add_system_elements_and_normalize_namespaces() { var historyRepository = new HistoryRepository(ConnectionString, ProviderFactory); var modelBuilder = new DbModelBuilder(DbModelBuilderVersion.V4_1); modelBuilder.Entity<FakeEntity>(); var model = modelBuilder.Build(ProviderInfo).GetModel(); historyRepository.AppendHistoryModel(model, ProviderInfo); Assert.Equal(1, model.Descendants(EdmXNames.Csdl.EntityTypeNames.Last()).Count(e => e.IsSystemAttribute() == "true")); Assert.Equal(1, model.Descendants(EdmXNames.Msl.EntitySetMappingNames.Last()).Count(e => e.IsSystemAttribute() == "true")); Assert.Equal(1, model.Descendants(EdmXNames.Ssdl.EntityTypeNames.Last()).Count(e => e.IsSystemAttribute() == "true")); Assert.Equal(1, model.Descendants(EdmXNames.Ssdl.EntitySetNames.Last()).Count(e => e.IsSystemAttribute() == "true")); }
internal DbMigrator(DbMigrationsConfiguration configuration, DbContext usersContext) : base(null) { Contract.Requires(configuration != null); Contract.Requires(configuration.ContextType != null); _configuration = configuration; _calledByCreateDatabase = usersContext != null; // If DbContext CreateDatabase is using Migrations then the user has not opted out of initializers // and if we disable the initializer here then future calls to Initialize the database (for this or // a different connection) will fail. So only disable the initializer if Migrations are being used // explicitly. if (usersContext == null) { DisableInitializer(_configuration.ContextType); } if (_calledByCreateDatabase) { _usersContextInfo = new DbContextInfo(usersContext); } else { _usersContextInfo = configuration.TargetDatabase == null ? new DbContextInfo(configuration.ContextType) : new DbContextInfo(configuration.ContextType, configuration.TargetDatabase); if (!_usersContextInfo.IsConstructible) { throw Error.ContextNotConstructible(configuration.ContextType); } } _modelDiffer = _configuration.ModelDiffer; var context = usersContext ?? _usersContextInfo.CreateInstance(); try { _migrationAssembly = new MigrationAssembly(_configuration.MigrationsAssembly, _configuration.MigrationsNamespace); _currentModel = context.GetModel(); var connection = context.Database.Connection; _providerFactory = DbProviderServices.GetProviderFactory(connection); _defaultSchema = context.InternalContext.DefaultSchema; var historySchemas = GetHistorySchemas(); if (!string.IsNullOrWhiteSpace(_defaultSchema)) { historySchemas = historySchemas.Concat(new[] { _defaultSchema }); } _historyRepository = new HistoryRepository(_usersContextInfo.ConnectionString, _providerFactory, historySchemas); _providerManifestToken = context.InternalContext.ModelProviderInfo != null ? context.InternalContext.ModelProviderInfo.ProviderManifestToken : DbProviderServices.GetProviderServices(connection). GetProviderManifestTokenChecked(connection); _targetDatabase = Strings.LoggingTargetDatabaseFormat( connection.DataSource, connection.Database, _usersContextInfo.ConnectionProviderName, _usersContextInfo.ConnectionStringOrigin == DbConnectionStringOrigin.DbContextInfo ? Strings.LoggingExplicit : _usersContextInfo.ConnectionStringOrigin.ToString()); } finally { if (usersContext == null) { context.Dispose(); } } var providerInfo = new DbProviderInfo(_usersContextInfo.ConnectionProviderName, _providerManifestToken); _emptyModel = new Lazy<XDocument>(() => new DbModelBuilder().Build(providerInfo).GetModel()); _historyRepository.AppendHistoryModel(_currentModel, providerInfo); }