protected override void Execute(SchemaMetadataElement metadataElement) { IConnectionStringIdentity masterConnectionStringIdentity; if (!metadataElement.TryGetMasterConnectionString(out masterConnectionStringIdentity)) { return; } var entities = _contextEntityTypesProvider.GetTypesFromContext(metadataElement.Context); var schemas = entities.Select(x => metadataElement.Schema.GetAttribute<TableAttribute>(x)?.Schema) .Where(x => !string.IsNullOrEmpty(x)) .Distinct(); var databaseSchemaComparer = new DatabaseSchemaComparer( _connectionFactory.CreateDatabaseConnection(metadataElement.ConnectionStringIdentity), _connectionFactory.CreateDatabaseConnection(masterConnectionStringIdentity), schemas); var differences = databaseSchemaComparer.GetDifferences(); var sb = new StringBuilder("Tables and vies not exist ot different in master database" + Environment.NewLine); var hasDifferences = false; foreach (var difference in differences) { hasDifferences = true; sb.AppendLine(difference.ToString()); } if (hasDifferences) { throw new ArgumentException(sb.ToString()); } }
protected override void Execute(SchemaMetadataElement metadataElement) { var database = _smoConnectionFactory.CreateDatabaseConnection(metadataElement.ConnectionStringIdentity); using (var dataConnection = _dataConnectionFactory.CreateConnection(metadataElement)) { var entities = _contextEntityTypesProvider.GetTypesFromContext(metadataElement.Context); var schemaNames = entities.Select(x => dataConnection.MappingSchema.GetAttribute <TableAttribute>(x)?.Schema) .Where(x => !string.IsNullOrEmpty(x) && database.Schemas[x] == null) .Distinct() .ToArray(); foreach (var schemaName in schemaNames) { var schema = new Schema(database, schemaName); schema.Create(); } foreach (var entity in entities) { var factory = (ITableFactory)Activator.CreateInstance(typeof(TableFactory <>).MakeGenericType(entity)); factory.CreateTable(dataConnection); } } }
private Func<object, string> CreateSerializer(Type entityType, SchemaMetadataElement schemaMetadataElement) { var properties = schemaMetadataElement.Schema.GetEntityDescriptor(entityType).Columns.OrderBy(x => !x.IsPrimaryKey).Select(x => x.MemberAccessor); return obj => string.Concat( obj.GetType().Name, "{", string.Join(", ", properties.Select(property => $"{property.Name}: '{property.GetValue(obj)}'")), "}"); }
protected override void Execute(SchemaMetadataElement metadataElement) { var entities = _contextEntityTypesProvider.GetTypesFromContext(metadataElement.Context); using (var dataConnection = _dataConnectionFactory.CreateConnection(metadataElement)) { var sqlSchemaService = new SqlSchemaService(dataConnection); sqlSchemaService.CreateTables(entities); } }
public DataConnection CreateConnection(SchemaMetadataElement metadata) { var connectionString = _connectionStringSettings.GetConnectionString(metadata.ConnectionStringIdentity); var baseSchema = metadata.Schema; baseSchema.SetDataType(typeof(decimal), new SqlDataType(DataType.Decimal, 19, 4)); baseSchema.SetDataType(typeof(decimal?), new SqlDataType(DataType.Decimal, 19, 4)); baseSchema.SetDataType(typeof(string), new SqlDataType(DataType.NVarChar, int.MaxValue)); return SqlServerTools.CreateDataConnection(connectionString).AddMappingSchema(baseSchema); }
protected override void Execute(SchemaMetadataElement metadataElement) { var connectionString = _settings.GetConnectionString(metadataElement.ConnectionStringIdentity); var server = _smoConnectionFactory.CreateServerConnection(metadataElement.ConnectionStringIdentity); var targetDbName = GetDatabaseName(connectionString); var existingDb = server.Databases[targetDbName]; if (existingDb != null) { return; } var newDb = new Database(server, targetDbName); newDb.Create(); }
protected abstract void Execute(SchemaMetadataElement metadataElement);
public MessageFormatter(Type entityType, SchemaMetadataElement schemaMetadataElement) { _serializer = CreateSerializer(entityType, schemaMetadataElement); }
protected override void Execute(SchemaMetadataElement metadataElement) { var existingDb = _smoConnectionFactory.CreateDatabaseConnection(metadataElement.ConnectionStringIdentity); existingDb?.Parent.KillDatabase(existingDb.Name); }