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(); } }
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); }
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); }
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)"); } } }
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); }
public SqlStreamStoreRepository(string connectionString) { settings = new MsSqlStreamStoreSettings(connectionString); }