示例#1
0
        protected override void Load(ContainerBuilder builder)
        {
            builder
            .RegisterGeneric(typeof(Repository <>))
            .As(typeof(IAsyncRepository <>))
            .InstancePerLifetimeScope();

            if (string.IsNullOrWhiteSpace(_eventsConnectionString))
            {
                builder.RegisterType <InMemoryStreamStore>()
                .As <InMemoryStreamStore>()
                .As <IStreamStore>()
                .As <IReadonlyStreamStore>()
                .SingleInstance();
            }
            else
            {
                var settings = new MsSqlStreamStoreSettings(_eventsConnectionString)
                {
                    Schema = _schema
                };

                _settingsFunc?.Invoke(settings);

                builder.RegisterInstance(settings);
                builder.RegisterType <MsSqlStreamStore>()
                .As <MsSqlStreamStore>()
                .As <IStreamStore>()
                .As <IReadonlyStreamStore>()
                .SingleInstance();
            }
        }
示例#2
0
        static async Task Main(string[] args)
        {
            var tpyeResovler     = new FullyQualifiedTypeNameTypeResolver("EventSourced.Example.Aggregate.Events.{0}, EventSourced.Example");
            var connectionString = "Server=(local);Database=SqlStreamStoreDemo;Trusted_Connection=True;MultipleActiveResultSets=true";
            var settings         = new MsSqlStreamStoreSettings(connectionString);
            var streamStore      = new MsSqlStreamStore(settings);

            streamStore.CreateSchema().GetAwaiter().GetResult();

            var eventStore = new SqlStreamStoreEventStore(streamStore, tpyeResovler);
            var system     = new EventSourcingSystem(eventStore);

            var counterCurrentValuesReadModel = new CounterCurrentValuesReadModel(system);
            var allPersistenceIdsReadModel    = new AllPersistenceIdsReadModel(system);

            var counterId = Guid.Parse("8c936406-720a-45d4-b1e0-a95bd595943f");
            var counter   = await system.Get(() => new Counter(counterId));

            if (!counter.IsInitialized())
            {
                counter.Initialize(0);
            }

            counter.Increment(5);
            counter.Decrement(2);

            Thread.Sleep(5000);
        }
        public async Task <IStreamStore> GetStreamStore(string schema)
        {
            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema = schema,
            };
            var store = new MsSqlStreamStore(settings);
            await store.CreateSchema();

            return(store);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ReadContext>(options =>
            {
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            });

            var settings = new MsSqlStreamStoreSettings(Configuration.GetConnectionString("DefaultConnection"));

            settings.Schema = "ES";
            services.AddSingleton(settings);
            services.AddSingleton <IStreamStore, MsSqlStreamStore>();
            services.AddMvc();
        }
        public async Task <MsSqlStreamStore> GetMsSqlStreamStore()
        {
            await CreateDatabase();

            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = _schema,
                GetUtcNow = () => GetUtcNow()
            };

            var store = new MsSqlStreamStore(settings);
            await store.CreateSchema();

            return(store);
        }
示例#6
0
        private MsSqlStreamStore GetStore()
        {
            var configurationBuilder = new ConfigurationBuilder()
                                       .SetBasePath(Directory.GetCurrentDirectory())
                                       .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

            var environment   = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT");
            var isDevelopment = string.Equals(environment, "development", StringComparison.OrdinalIgnoreCase);

            if (isDevelopment)
            {
                configurationBuilder.AddUserSecrets(Assembly.GetCallingAssembly());
            }

            var configuration    = configurationBuilder.Build();
            var connectionString = configuration["EventStore:SqlStreamStore:ConnectionString"];
            var settings         = new MsSqlStreamStoreSettings(connectionString);
            var store            = new MsSqlStreamStore(settings);

            return(store);
        }
示例#7
0
        public async Task <IStreamStore> GetStreamStore(string schema = "es")
        {
            try
            {
                await CreateDatabase();
            }
            catch (SqlException e) when(e.Number == 1801)
            {
                //for testing, db exists, just ctn
            }

            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = schema,
                GetUtcNow = () => GetUtcNow(),
            };
            var store = new SqlStreamStore.MsSqlStreamStore(settings);
            await store.CreateSchema();

            return(store);
        }
        private static async Task CreateDatabase(string connectionString, CancellationToken ct)
        {
            // There is a while true loop here, because sometimes after creating the db, the db is not available always.
            // There are much better ways of handling this, but I couldn't be bothered right now;)
            while (true)
            {
                try
                {
                    await Task.Delay(1000);

                    Console.WriteLine("Creating database schema");
                    await Task.Delay(3000);

                    var mgr = new DatabaseManager(connectionString);
                    mgr.EnsureDatabaseExists(10, 10);

                    await Task.Delay(2000, ct);

                    var msSqlStreamStoreSettings = new MsSqlStreamStoreSettings(connectionString);

                    var store = new MsSqlStreamStore(msSqlStreamStoreSettings);
                    if (!(await store.CheckSchema(ct)).IsMatch())
                    {
                        await store.CreateSchema(ct);
                    }

                    var repo = new StreamStoreConfigRepository(store);

                    Console.WriteLine("Now generating 20 changes:");

                    for (int i = 0; i < 20; i++)
                    {
                        await Task.Delay(1000, ct);

                        await repo.Modify(ct, ("setting1", "new value, written at: " + DateTime.Now.ToLongTimeString()));
                    }

                    // Delay for a while, so the latest version can be printed.
                    await Task.Delay(1000, ct);

                    var history = await repo.GetSettingsHistory(ct);

                    Console.WriteLine($"There have historically been:{history.Count} versions: ");
                    foreach (var setting in history)
                    {
                        Console.WriteLine($"\t- Version: {setting.Version}, setting1 = '{setting["setting1"]}', ModifiedKeys: [{string.Join(',', setting.ModifiedKeys)}]");
                    }

                    Console.WriteLine($"Now reverting back to the first version's data: {history.First().Version}");

                    // Now revert back to the first version (this actually creates a new version, with the old data in it)
                    await repo.RevertToVersion(history.First(), ct);


                    // Completed succesfully. End the function
                    return;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("error while creating database: " + ex.Message + " (will retry)");
                }
            }
        }
示例#9
0
        private int OnExecute(CommandLineApplication app)
        {
            if (string.IsNullOrEmpty(SQLDialect) || string.IsNullOrEmpty(Output))
            {
                app.ShowHelp();
                return(0);
            }

            var exitCode = 0;

            switch (SQLDialect.ToLowerInvariant())
            {
            case "mssqlv2":
#pragma warning disable 618
                var mssqlV2Settings = new MsSqlStreamStoreSettings(new SqlConnectionStringBuilder
                {
                    DataSource = "tcp:0.0.0.0,1433"
                }.ConnectionString);
                if (!string.IsNullOrEmpty(Schema))
                {
                    mssqlV2Settings.Schema = Schema;
                }

                if (CreateSchema)
                {
                    var script = string.Join(
                        Environment.NewLine,
                        $@"IF NOT EXISTS (
SELECT  schema_name
FROM    information_schema.schemata
WHERE   schema_name = '{Schema}' ) 

BEGIN
EXEC sp_executesql N'CREATE SCHEMA {Schema}'
END",
                        new MsSqlStreamStore(mssqlV2Settings).GetSchemaCreationScript());
                    File.WriteAllText(Output, script);
                }
                else
                {
                    File.WriteAllText(Output, new MsSqlStreamStore(mssqlV2Settings).GetSchemaCreationScript());
                }
#pragma warning restore 618
                break;

            case "mssqlv3":
                var mssqlV3Settings = new MsSqlStreamStoreV3Settings(new SqlConnectionStringBuilder
                {
                    DataSource = "tcp:0.0.0.0,1433"
                }.ConnectionString);
                if (!string.IsNullOrEmpty(Schema))
                {
                    mssqlV3Settings.Schema = Schema;
                }
                if (CreateSchema)
                {
                    var script = string.Join(
                        Environment.NewLine,
                        $@"IF NOT EXISTS (
SELECT  schema_name
FROM    information_schema.schemata
WHERE   schema_name = '{Schema}' ) 

BEGIN
EXEC sp_executesql N'CREATE SCHEMA {Schema}'
END",
                        new MsSqlStreamStoreV3(mssqlV3Settings).GetSchemaCreationScript());
                    File.WriteAllText(Output, script);
                }
                else
                {
                    File.WriteAllText(Output, new MsSqlStreamStoreV3(mssqlV3Settings).GetSchemaCreationScript());
                }

                break;

            case "mysql":
                var mysqlSettings = new MySqlStreamStoreSettings(new MySqlConnectionStringBuilder
                {
                    Server = "0.0.0.0"
                }.ConnectionString);
                if (!string.IsNullOrEmpty(Schema))
                {
                    Log.Information("The optional database schema does not apply to the mysql dialect and can be omitted: {Schema}", Schema);
                }
                File.WriteAllText(Output, new MySqlStreamStore(mysqlSettings).GetSchemaCreationScript());
                break;

            case "postgres":
                var postgresSettings = new PostgresStreamStoreSettings(new NpgsqlConnectionStringBuilder
                {
                    Host = "0.0.0.0"
                }.ConnectionString);
                if (!string.IsNullOrEmpty(Schema))
                {
                    postgresSettings.Schema = Schema;
                }

                if (CreateSchema)
                {
                    var script = string.Join(
                        Environment.NewLine,
                        $"CREATE SCHEMA IF NOT EXISTS {Schema};",
                        new PostgresStreamStore(postgresSettings).GetSchemaCreationScript()
                        );
                    File.WriteAllText(Output, script);
                }
                else
                {
                    File.WriteAllText(Output, new PostgresStreamStore(postgresSettings).GetSchemaCreationScript());
                }
                break;

            default:
                Log.Error("The SQL dialect was not recognized: {SQLDialect}", SQLDialect);
                exitCode = 1;
                break;
            }

            return(exitCode);
        }
示例#10
0
 public SqlStreamStoreRepository(string connectionString)
 {
     settings = new MsSqlStreamStoreSettings(connectionString);
 }