Skip to content

Repository files navigation

FluentDbTools

Build StatusMIT licenseAPI documentation

FluentDbTools provides a fluent SQL abstraction layer for creating database connections, building sql queries and migrating your database.

Following databases are currently supported:

  • Oracle
  • Postgres

Nugets

  • FluentDbTools.Abstractions: NuGet version
  • FluentDbTools.Common.Abstractions: NuGet version
  • FluentDbTools.Migration.Abstractions: NuGet version
  • FluentDbTools.SqlBuilder.Abstractions: NuGet version
  • FluentDbTools.Contracts: NuGet version
  • FluentDbTools.Migration.Contracts: NuGet version
  • FluentDbTools.Extensions.DbProvider: NuGet version
  • FluentDbTools.Extensions.SqlBuilder: NuGet version
  • FluentDbTools.Extensions.Migration: NuGet version
  • FluentDbTools.Extension.MSDependencyInjection: NuGet version
  • FluentDbTools.Extension.MSDependencyInjection.Oracle: NuGet version
  • FluentDbTools.Extension.MSDependencyInjection.Postgres: NuGet version
  • FluentDbTools.DbProviders: NuGet version
  • FluentDbTools.Migration: NuGet version
  • FluentDbTools.Migration.Common: NuGet version
  • FluentDbTools.Migration.Oracle: NuGet version
  • FluentDbTools.Migration.Postgres: NuGet version
  • FluentDbTools.SqlBuilder: NuGet version
  • FluentDbTools.SqlBuilder.Dapper: NuGet version

Example

The IDbConfig interface is the only member you need to instantiate. It provides a simple interface for providing which database type to use, and other necessary database settings.

Create a Database Connection

IDbConfigdbConfig=newDbConfig(..)// Implementantion of IDbConfig requested
OracleClientFactory.Instance.Register(SupportedDatabaseTypes.Oracle);// Register the database factories you see fitNpgsqlFactory.Instance.Register(SupportedDatabaseTypes.Postgres);vardbConnection=dbConfig.CreateDbConnection();

Register Database Providers with MSDependencyInjection

varserviceCollection=newServiceCollection();varserviceProvider=serviceCollection.AddSingleton<IConfiguration>(serviceProvider =>newConfigurationBuilder().AddJsonFile("config.json")).AddOracleDbProvider().AddPostgresDbProvider().BuildServiceProvider();using(varscope=serviceProvider.CreateScope()){vardbFactory=scope.ServiceProvider.GetService<DbProviderFactory>();vardbConnection=scope.ServiceProvider.GetService<IDbConnection>();}

Typical Json Configuration with MSDependencyInjection

"database": {
"type": "postgres",
"user": "dbuser",
"password": "dbpassword",
"adminUser": "admindbuser",
"adminPassword": "admindbuser",
"schema": "dbuser", "databaseName": "dbuser", "hostname": "localhost",
"port": 5432,
"pooling": true,
// If you want all tables should be prefixed with EX // i.e. Person will give tablename EXPerson in the database"schemaPrefix": {
"Id": "EX", "UniqueId": "excv", "tables": {
// ChangeLogContext for table "Person""person": {
"GlobalId": "abcd",
"ShortName": "EXTST"
}
}
}
"migration": {
"schemaPassword": "dbpassword" }
}
// If database:schema not set, then it equals to 'database:user'// If database:databaseName not set, then it equals to 'database:schema'// If database:schemaPassword not set, then it equals to 'database:password'

Build SQL Query Fluently

IDbConfigdbConfig=DbConfigDatabaseTargets.Create(databaseTypes,schema);varsql=dbConfig.CreateSqlBuilder().Select().OnSchema().Fields<Person>(x =>x.F(item =>item.Id)).Fields<Person>(x =>x.F(item =>item.SequenceNumber)).Fields<Person>(x =>x.F(item =>item.Username)).Fields<Person>(x =>x.F(item =>item.Password)).Where<Person>(x =>x.WP(item =>item.Id)).Build();

Register Migration With MSDependencyInjection & Migrate the Database With Extended FluentMigrator

IEnumerable<Assembly> migrationAssemblies =>new[]{typeof(AddPersonTable).Assembly};varserviceProvider=newServiceCollection().AddSingleton<IConfiguration>(serviceProvider =>newConfigurationBuilder().AddJsonFile("config.json")).ConfigureWithMigrationAndScanForVersionTable(migrationAssemblies).BuildServiceProvider();using(varscope=provider.CreateScope()){varmigrationRunner=scope.ServiceProvider.GetService<IMigrationRunner>();migrationRunner.MigrateUp();}
[Migration(1,"Migration Example With SchemaPrefix")]publicclassAddPersonTable:MigrationModel{publicoverridevoidUp(){// Create the ChangeLogContext with values from this.GetMigrationConfig()// -// SchemaPrefixId is fetched from database:migration:schemaPrefix:id or database:schemaPrefix:id<br/>// SchemaPrefixUniqueId is fetched from database:migration:schemaPrefix:UniqueId or database:schemaPrefix:UniqueId<br/>// -// GlobalId is fetched from database:migration:schemaPrefix:tables:person:GlobalId or database:schemaPrefix:tables:person:GlobalId<br/>// ShortName is fetched from database:migration:schemaPrefix:tables:person:ShortName or database:schemaPrefix:tables:person:ShortName<br/>varpersonChangeLogContext=newChangeLogContext(this,Table.Person);// When "database:schemaPrefix:Id" or "database:migration:schemaPrefix:Id" have a value,// the tableName Person will be created as {SchemaPrefixId}Person.//// i.e: "database:schemaPrefix:Id" = "EX" => a table with name EXPerson will be created.// If both "database:schemaPrefix:Id" and "database:migration:schemaPrefix:Id" is missing,// a table with name Person will be created.Create.Table(Table.Person.GetPrefixedName(SchemaPrefixId)).InSchema(personChangeLogContext).WithChangeLog(PersonLogContext)// ChangeLog activation for Create.Table(..).WithColumn(Column.Id).AsGuid().PrimaryKey().WithColumn(Column.SequenceNumber).AsInt32().NotNullable().WithColumn(Column.Username).AsString().WithColumn(Column.Password).AsString().WithDefaultColumns()// Enable DefaultColumns functionality.WithTableSequence(this);}publicoverridevoidDown(){varpersonChangeLogContext=newChangeLogContext(this,Table.Person);Delete.Table(GetPrefixedName(Table.Person)).WithChangeLog(personChangeLogContext,this).InSchema(SchemaName);}}

More Examples

Please have a look in the example folder:

Get Started

  1. Install Docker
  2. Install Python and pip
  3. Install python dependencies:
    • pip install DockerBuildManagement
  4. See available commands:
    • dbm -help

Build & Run

  1. Start domain development by deploying service dependencies:
    • dbm -swarm -start
  2. Test solution in containers:
    • dbm -test
  3. Open solution and continue development:
  4. Publish new nuget version:
    • Bump version in CHANGELOG.md
    • Build and publish nugets: dbm -build -run -publish
  5. Stop development when you feel like it:
    • dbm -swarm -stop

Buildsystem

About

FluentDbTools provides a fluent SQL abstraction layer for creating database connections, building sql queries and migrating your database.

Topics

Resources

Stars

6 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages