Exemplo n.º 1
0
        private static void Main(string[] args)
        {
            var connectionString = ConfigurationManager.AppSettings["defaultConnection"];

            if (args.Length > 0)
            {
                connectionString = args[0];
            }

            // Use ConferenceContext as entry point for dropping and recreating DB
            using (var context = new ConferenceContext()) {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }
                context.Database.Create();
            }

            Database.SetInitializer <EventStoreDbContext>(null);
            Database.SetInitializer <MessageLogDbContext>(null);
            Database.SetInitializer <BlobStorageDbContext>(null);
            Database.SetInitializer <ConferenceRegistrationDbContext>(null);
            Database.SetInitializer <RegistrationProcessManagerDbContext>(null);
            Database.SetInitializer <PaymentsDbContext>(null);

            DbContext[] contexts =
            {
                new EventStoreDbContext(connectionString),
                new MessageLogDbContext(connectionString),
                new BlobStorageDbContext(connectionString),
                new PaymentsDbContext(connectionString),
                new RegistrationProcessManagerDbContext(connectionString),
                new ConferenceRegistrationDbContext(connectionString)
            };

            foreach (var context in contexts)
            {
                var adapter = (IObjectContextAdapter)context;
                var script  = adapter.ObjectContext.CreateDatabaseScript();
                context.Database.ExecuteSqlCommand(script);
                context.Dispose();
            }

            using (var context = new ConferenceRegistrationDbContext(connectionString)) {
                ConferenceRegistrationDbContextInitializer.CreateIndexes(context);
            }

            using (var context = new RegistrationProcessManagerDbContext(connectionString)) {
                RegistrationProcessManagerDbContextInitializer.CreateIndexes(context);
            }

            using (var context = new PaymentsDbContext(connectionString)) {
                PaymentsReadDbContextInitializer.CreateViews(context);
            }

            MessagingDbInitializer.CreateDatabaseObjects(connectionString, "SqlBus");
        }
        public void InitializeDatabase(RegistrationProcessManagerDbContext context)
        {
            // Note that we only create the table if it doesn't exist, so this
            // can safely run with already upgraded databases.
            try
            {
                context.Database.ExecuteSqlCommand(@"
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[ConferenceRegistrationProcesses].[UndispatchedMessages]') AND type in (N'U'))
    CREATE TABLE [ConferenceRegistrationProcesses].[UndispatchedMessages]
    (
	    [Id] [uniqueidentifier] NOT NULL,
	    [Commands] [nvarchar](max) NULL,
        PRIMARY KEY CLUSTERED 
        (
	        [Id] ASC
        ) WITH (STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF)
    );");
            }
            catch (SqlException e)
            {
                if (e.Number != 2714)
                {
                    throw;
                }
            }

            try
            {
                context.Database.ExecuteSqlCommand(@"
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'ConferenceRegistrationProcesses' AND TABLE_NAME = 'RegistrationProcess' AND COLUMN_NAME = 'SeatReservationCommandId')
    ALTER TABLE [ConferenceRegistrationProcesses].[RegistrationProcess]
    ADD [SeatReservationCommandId] [uniqueidentifier] NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
        [TimeStamp] [timestamp] NOT NULL
");
            }
            catch (SqlException e)
            {
                if (e.Number != 2705)
                {
                    throw;
                }
            }

            ConferenceRegistrationDbContextInitializer.CreateIndexes(context);
        }