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);
                }
            }
        }
예제 #3
0
 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)}'")),
         "}");
 }
예제 #4
0
        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();
        }
예제 #7
0
 protected abstract void Execute(SchemaMetadataElement metadataElement);
예제 #8
0
 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);
 }