public async Task MigrateGroup1Preview() { var model = DbModelFactory.GenerateModel(new Migration1().Types); model.OutputTableDatas.PrintStringTable("Tables in Topological Order"); //Also, let's do a spot check on the Quantity columns MyDecimalSqlTypeAttribute data type. var orderLine2Table = model.OutputTableDatas.Single(z => z.TableName.Table == nameof(OrderLine2)); var quantityColumn = orderLine2Table.ColumnCreationData.Single(z => z.ColumnDataName.Name == nameof(OrderLine2.Quantity)); var myDecimalSqlTypeAttribute = quantityColumn.SqlTypeAttribute as MyDecimalSqlTypeAttribute; myDecimalSqlTypeAttribute.Precision.Should().Be(38); myDecimalSqlTypeAttribute.Scale.Should().Be(12); //And now let's print out the migration. var dbManipulator = new DbManipulator(new SqlServerDbAdapter(null), typeof(RunMigrationsTest).Assembly, new[] { "Group1" }); dbManipulator.ShowSql = true; dbManipulator.ShowElapsedTime = false; dbManipulator.PreviewOnly = true; await dbManipulator.UpdateDatabase(); }
public void ConventionsTest() { var types = new List <Type>() { typeof(Job), typeof(Resource) }; var dbModel = DbModelFactory.GenerateModel(types); var jobTable = dbModel.OutputTableDatas.Single(z => z.TableName.Table == "Job"); var resourceTable = dbModel.OutputTableDatas.Single(z => z.SourceType.Name == "Resource"); Console.WriteLine(jobTable.ToString()); Console.WriteLine(resourceTable.ToString()); jobTable.ColumnCreationData[0].ColumnDataName.Name.Should().Be("Id"); jobTable.ColumnCreationData[0].PrimaryKeyInformation.IsPrimaryKey.Should().BeTrue(); jobTable.ColumnCreationData[0].IdentityInformation.Seed.Should().Be(1); jobTable.ColumnCreationData[0].IdentityInformation.Increment.Should().Be(1); var resourceIdColumn = jobTable.ColumnCreationData[1]; resourceIdColumn.ForeignKeyInformation.ForeignSchemaName.Should().Be("dbo"); resourceIdColumn.ForeignKeyInformation.ForeignTableName.Should().Be("Job"); resourceIdColumn.ForeignKeyInformation.ForeignColumnNames.Should().Be("ResourceId"); resourceIdColumn.ForeignKeyInformation.PrimarySchemaName.Should().Be("MySchema"); resourceIdColumn.ForeignKeyInformation.PrimaryTableName.Should().Be("Production.Resource"); resourceIdColumn.ForeignKeyInformation.PrimaryColumnNames.Should().Be("Id"); resourceTable.ColumnCreationData[0].ColumnDataName.Name.Should().Be("Id"); resourceTable.ColumnCreationData[0].PrimaryKeyInformation.IsPrimaryKey.Should().BeTrue(); resourceTable.ColumnCreationData[0].IdentityInformation.Seed.Should().Be(1); resourceTable.ColumnCreationData[0].IdentityInformation.Increment.Should().Be(1); var rowVersionColumn = resourceTable.ColumnCreationData[1]; rowVersionColumn.SqlTypeAttribute.Should().BeOfType <RowVersionTypeAttribute>(); }
public void TestNullables() { var types = new List <Type>() { typeof(TypeWithNullables), }; var dbModel = DbModelFactory.GenerateModel(types); Console.WriteLine(dbModel.ToString()); var(table, columns) = dbModel.OutputTableDatas[0]; columns[0].ColumnDataName.Name.Should().Be("OrderNumber"); columns[0].SqlTypeAttribute.AllowNull.Should().BeTrue(); columns[0].SqlTypeAttribute.Should().BeOfType(typeof(Int32TypeAttribute)); columns[1].ColumnDataName.Name.Should().Be("Description"); columns[1].SqlTypeAttribute.AllowNull.Should().BeTrue(); columns[1].SqlTypeAttribute.Should().BeOfType(typeof(StringTypeAttribute)); columns[2].ColumnDataName.Name.Should().Be("Number"); columns[2].SqlTypeAttribute.AllowNull.Should().BeFalse(); columns[2].SqlTypeAttribute.Should().BeOfType(typeof(DoubleTypeAttribute)); columns[3].ColumnDataName.Name.Should().Be("NumberNullable"); columns[3].SqlTypeAttribute.AllowNull.Should().BeTrue(); columns[3].SqlTypeAttribute.Should().BeOfType(typeof(DoubleTypeAttribute)); columns[4].ColumnDataName.Name.Should().Be("NotNullObject"); columns[4].SqlTypeAttribute.AllowNull.Should().BeFalse(); columns[4].SqlTypeAttribute.Should().BeOfType(typeof(StringTypeAttribute)); columns[5].ColumnDataName.Name.Should().Be("NullObject"); columns[5].SqlTypeAttribute.AllowNull.Should().BeTrue(); columns[5].SqlTypeAttribute.Should().BeOfType(typeof(StringTypeAttribute)); }
// Inject background service, for receiving message public void ConfigureServices(IServiceCollection services) { var serviceProvider = services.BuildServiceProvider(); var loggerFactorySrv = serviceProvider.GetService <ILoggerFactory>(); services.AddDbContextPool <EventSourcingDbContext>(options => options.UseSqlServer( _systemLocalConfiguration.EventDbConnection, //enable connection resilience connectOptions => { connectOptions.EnableRetryOnFailure(); connectOptions.CommandTimeout(Identifiers.TimeoutInSec); }) //.UseLoggerFactory(loggerFactorySrv)// to log queries ); /// Injecting message receiver background service /// #region worker background services #region event sourcing worker services.AddSingleton <IHostedService, RabbitMQSubscriberWorker>(srv => { //get pingServicek var eventSourcingSrv = new EventSourcingLedger(loggerFactorySrv, srv.GetService <EventSourcingDbContext>()); return(new RabbitMQSubscriberWorker (serviceProvider, loggerFactorySrv, new RabbitMQConfiguration { hostName = _systemLocalConfiguration.MessagesMiddleware, exchange = _systemLocalConfiguration.MiddlewareExchange, userName = _systemLocalConfiguration.MessagesMiddlewareUsername, password = _systemLocalConfiguration.MessagesMiddlewarePassword, routes = _systemLocalConfiguration.MessageSubscriberRoute?.Split('-') ?? new string[0] } , (pingMessageCallback) => { try { var message = pingMessageCallback(); if (message != null) { var domainModel = Utilities.JsonBinaryDeserialize <DomainModels.Types.DomainModel <object> >(message); var dbModel = DbModelFactory.Create(domainModel); if (dbModel != null) { eventSourcingSrv.Add(dbModel).Wait(); } } Logger.LogInformation($"[x] Event sourcing service receiving a message from exchange: {_systemLocalConfiguration.MiddlewareExchange}, route :{_systemLocalConfiguration.MessageSubscriberRoute}"); } catch (Exception ex) { Logger.LogCritical(ex, "Object de-serialization exception."); } })); }); #endregion #endregion }
public IQueryable <TrackingModel> Query(IFilter queryFilter, Func <TrackingModel, bool> predicate = null) { return(_pingEventSourcingLedger .Query(queryFilter, QueryConverter(predicate)) .Select(q => new TrackingModel(DbModelFactory.Convert <Tracking>(q)))); }
public IQueryable <PingModel> Query(Func <PingModel, bool> predicate) { return(_pingEventSourcingLedger .Query(QueryConverter(predicate)) .Select(q => new PingModel(DbModelFactory.Convert <Ping>(q)))); }
public Task <int> Add(PingModel pingEventSourcing) { return (_pingEventSourcingLedger .Add(DbModelFactory.Create(pingEventSourcing))); }