private int GetBdMigrationVersion()
        {
            var version = 0;

            Utils.Config.Load();
            var connectionString = Utils.Config.GetProperty("DefaultConnectionString");

            Log.Info("Получение версии бд со строкой {0}", connectionString);
            var config = new NHibernate.Cfg.Configuration();

            config.Configure("hibernate.cfg.xml");
            config.DataBaseIntegration(
                properties => properties.ConnectionString = connectionString);

            try
            {
                using (var session = config.BuildSessionFactory().OpenSession())
                {
                    var versionString =
                        session.CreateSQLQuery("SELECT \"Version\" FROM \"VersionInfo\" order by \"Version\" desc limit 1;").UniqueResult();
                    version = Int32.Parse(versionString.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Не удалось проверить версию БД, попробуем развернуть БД.", "Внимание", MessageBoxButton.OK, MessageBoxImage.Warning);
                Log.ErrorException("Не удалось проверить версию БД, попробуем развернуть БД. Тест версии бд провален, считаем версию как 0", ex);
            }

            return(version);
        }
        public bool TestConnection()
        {
            var result = true;

            Utils.Config.Load();
            var connectionString = Utils.Config.GetProperty("DefaultConnectionString");

            Log.Info("Тест подключения со строкой {0}", connectionString);
            var config = new NHibernate.Cfg.Configuration();

            config.Configure("hibernate.cfg.xml");
            config.DataBaseIntegration(
                properties => properties.ConnectionString = connectionString);

            try
            {
                using (var session = config.BuildSessionFactory().OpenSession())
                {
                }
            }
            catch (Exception ex)
            {
                result = false;
                Log.ErrorException("Тест подключения провалился", ex);
            }

            return(result);
        }
    static async Task AsyncMain()
    {
        Console.Title = "Samples.SQLNHibernateOutbox.Receiver";
        #region NHibernate

        var hibernateConfig = new Configuration();
        hibernateConfig.DataBaseIntegration(x =>
        {
            x.ConnectionString = ConnectionStrings.NserviceBusConnection;
            x.Dialect <MsSql2012Dialect>();
        });

        var outBoxhibernateConfig = new NHibernate.Cfg.Configuration();
        outBoxhibernateConfig.DataBaseIntegration(x =>
        {
            x.ConnectionString = ConnectionStrings.BusuinessConnection;
            x.Dialect <MsSql2012Dialect>();
        });
        outBoxhibernateConfig.SetProperty("default_schema", "dbo");
        #endregion

        var endpointConfiguration = new EndpointConfiguration("Samples.SQLNHibernateOutbox.Receiver");
        endpointConfiguration.UseSerialization <JsonSerializer>();
        #region ReceiverConfiguration

        var transport = endpointConfiguration.UseTransport <SqlServerTransport>();
        transport.ConnectionString(ConnectionStrings.NserviceBusConnection);


        var routing = transport.Routing();
        routing.RouteToEndpoint(typeof(OrderSubmitted).Assembly, "Samples.SQLNHibernateOutboxEF.Sender");
        routing.RegisterPublisher(typeof(OrderSubmitted).Assembly, "Samples.SQLNHibernateOutboxEF.Sender");


        var persistence = endpointConfiguration.UsePersistence <NHibernatePersistence>();
        persistence.UseConfiguration(hibernateConfig);

        var outboxpersistence = endpointConfiguration.UsePersistence <NHibernatePersistence, StorageType.Outbox>();
        outboxpersistence.UseConfiguration(outBoxhibernateConfig);

        var sagaPersistence = endpointConfiguration.UsePersistence <NHibernatePersistence, StorageType.Sagas>();
        sagaPersistence.UseConfiguration(outBoxhibernateConfig);

        var outboxEnabled = true;
        EnableOutbox(endpointConfiguration, outboxEnabled);

        #endregion

        #region RetriesConfiguration

        endpointConfiguration.Recoverability()
        .Immediate(immediate => immediate.NumberOfRetries(2))
        .Delayed(delayed => delayed.NumberOfRetries(1));

        #endregion

        endpointConfiguration.SendFailedMessagesTo("error");
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        endpointConfiguration.EnableInstallers();

        var kernel = new StandardKernel();
        kernel.Bind <IOrderRepository>()
        .To <OrderRepository>();
        kernel.Bind <IOrderRepository2>()
        .To <OrderRepository2>();

        if (outboxEnabled)
        {
            kernel.Bind <IDbContextProvider>().To <NsbDbContextProvider>();
        }

        endpointConfiguration.UseContainer <NinjectBuilder>(
            customizations: customizations =>
        {
            customizations.ExistingKernel(kernel);
        });

        var endpointInstance = await Endpoint.Start(endpointConfiguration)
                               .ConfigureAwait(false);

        try
        {
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
        finally
        {
            await endpointInstance.Stop()
            .ConfigureAwait(false);
        }
    }