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));
    }
Пример #4
0
        // 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
        }
Пример #5
0
 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)));
 }