Exemple #1
0
        public async Task CreateNewShip(CoreDddSampleNhibernateConfigurator nhibernateConfigurator)
        {
            using (var unitOfWork = new NhibernateUnitOfWork(nhibernateConfigurator))
            {
                unitOfWork.BeginTransaction();

                var shipRepository = new NhibernateRepository <Ship>(unitOfWork);

                try
                {
                    var createNewShipCommand = new CreateNewShipCommand {
                        ShipName = "lady", Tonnage = 10m
                    };
                    var createNewShipCommandHandler = new CreateNewShipCommandHandler(shipRepository);

                    var generatedShipId = 0;
                    createNewShipCommandHandler.CommandExecuted += args => generatedShipId = (int)args.Args;

                    await createNewShipCommandHandler.ExecuteAsync(createNewShipCommand);

                    Console.WriteLine($"Create new ship command was executed. Generated ship id: {generatedShipId}");

                    await unitOfWork.CommitAsync();
                }
                catch
                {
                    await unitOfWork.RollbackAsync();

                    throw;
                }
            }
        }
Exemple #2
0
        public async Task PersistNewEntity(CoreDddSampleNhibernateConfigurator nhibernateConfigurator)
        {
            using (var unitOfWork = new NhibernateUnitOfWork(nhibernateConfigurator))
            {
                unitOfWork.BeginTransaction();

                var shipRepository = new NhibernateRepository <Ship>(unitOfWork);

                try
                {
                    var ship = new Ship("ship name", tonnage: 10m);
                    await shipRepository.SaveAsync(ship);

                    await unitOfWork.CommitAsync();

                    Console.WriteLine("Ship entity was persisted.");
                }
                catch
                {
                    await unitOfWork.RollbackAsync();

                    throw;
                }
            }
        }
Exemple #3
0
        public async Task QueryShipsByName(CoreDddSampleNhibernateConfigurator nhibernateConfigurator)
        {
            using (var unitOfWork = new NhibernateUnitOfWork(nhibernateConfigurator))
            {
                unitOfWork.BeginTransaction();

                var shipRepository = new NhibernateRepository <Ship>(unitOfWork);

                try
                {
                    var ship = new Ship("lady starlight", tonnage: 10m);
                    await shipRepository.SaveAsync(ship);

                    unitOfWork.Flush();

                    var getShipByNameQuery = new GetShipsByNameQuery {
                        ShipName = "lady"
                    };
                    var getShipByNameQueryHandler = new GetShipsByNameQueryHandler(unitOfWork);

                    var shipDtos = await getShipByNameQueryHandler.ExecuteAsync <ShipDto>(getShipByNameQuery);

                    Console.WriteLine($"Ship by name query was executed. Number of ships queried: {shipDtos.Count()}");

                    await unitOfWork.CommitAsync();
                }
                catch
                {
                    await unitOfWork.RollbackAsync();

                    throw;
                }
            }
        }
Exemple #4
0
        private void _CreateDatabase()
        {
            using (var nhibernateConfigurator = new CoreDddSampleNhibernateConfigurator(shouldMapDtos: false)) // shouldMapDtos: false -> make sure dto database views are not created as tables
            {
                var configuration    = nhibernateConfigurator.GetConfiguration();
                var connectionString = configuration.Properties["connection.connection_string"];

                using (var connection = new SQLiteConnection(connectionString)) // for SQL server, use SqlConnection, for PostgreSQL, use NpgsqlConnection
                {
                    connection.Open();
                    new DatabaseSchemaCreator().CreateDatabaseSchema(nhibernateConfigurator, connection);
                }
            }
        }
Exemple #5
0
        public async Task BuildAndPersistPolicyEntitiesAndExecuteDomainBehaviourOnThemAndExecuteQueriesOverThem(
            CoreDddSampleNhibernateConfigurator nhibernateConfigurator,
            bool isDelayedDomainEventHandlingEnabled
            )
        {
            var ioCContainer = new WindsorContainer();

            _RegisterComponents(ioCContainer);

            _InitializeDomainEvents(ioCContainer, isDelayedDomainEventHandlingEnabled);

            _RegisterDomainEventHandlers(ioCContainer);

            var unitOfWork = ioCContainer.Resolve <NhibernateUnitOfWork>();

            try
            {
                unitOfWork.BeginTransaction();

                try
                {
                    var shipController         = ioCContainer.Resolve <ShipController>();
                    var policyHolderController = ioCContainer.Resolve <PolicyHolderController>();
                    var policyController       = ioCContainer.Resolve <PolicyController>();

                    await _CreateEntitiesUsingCommands(shipController, policyHolderController, policyController, unitOfWork);
                    await _QueryOverCreatedEntities(policyController);

                    await unitOfWork.CommitAsync();
                }
                catch
                {
                    await unitOfWork.RollbackAsync();

                    throw;
                }

                if (isDelayedDomainEventHandlingEnabled)
                {
                    DomainEvents.RaiseDelayedEvents();
                }
            }
            finally
            {
                ioCContainer.Release(unitOfWork);
            }

            ioCContainer.Dispose();
        }