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; } } }
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; } } }
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; } } }
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); } } }
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(); }