Skip to content
This repository was archived by the owner on Apr 15, 2025. It is now read-only.

Commit a14345f

Browse files
committed
Easier database creation. Closes #51
1 parent 1ef2cec commit a14345f

File tree

18 files changed

+193
-408
lines changed

18 files changed

+193
-408
lines changed
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
using System.Data;
2+
using MySql.Data.MySqlClient;
23

34
namespace DataCore.Database.MySql
45
{
5-
public class MySqlDatabase : Database
6+
public class MySqlDatabase : IDatabaseDefinition
67
{
7-
public MySqlDatabase(IDbConnection connection) : base(connection, new MySqlTranslator())
8+
public IDbConnection GetNewDbConnection(string connectionString)
89
{
10+
return new MySqlConnection(connectionString);
11+
}
12+
13+
public ITranslator GetTranslator()
14+
{
15+
return new MySqlTranslator();
916
}
1017
}
1118
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
using System.Data;
2+
using Oracle.ManagedDataAccess.Client;
23

34
namespace DataCore.Database.Oracle
45
{
5-
public class OracleDatabase : Database
6+
public class OracleDatabase : IDatabaseDefinition
67
{
7-
public OracleDatabase(IDbConnection connection)
8-
: base(connection, new OracleTranslator())
8+
public IDbConnection GetNewDbConnection(string connectionString)
99
{
10+
return new OracleConnection(connectionString);
11+
}
12+
13+
public ITranslator GetTranslator()
14+
{
15+
return new OracleTranslator();
1016
}
1117
}
1218
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
using System.Data;
2+
using Npgsql;
23

34
namespace DataCore.Database.Postgres
45
{
5-
public class PostgresDatabase : Database
6+
public class PostgresDatabase : IDatabaseDefinition
67
{
7-
public PostgresDatabase(IDbConnection connection) : base(connection, new PostgresTranslator())
8+
public IDbConnection GetNewDbConnection(string connectionString)
89
{
10+
return new NpgsqlConnection(connectionString);
11+
}
12+
13+
public ITranslator GetTranslator()
14+
{
15+
return new PostgresTranslator();
916
}
1017
}
1118
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
using System.Data;
2+
using System.Data.SqlClient;
23

34
namespace DataCore.Database.SqlServer
45
{
5-
public class SqlServerDatabase : Database
6+
public class SqlServerDatabase : IDatabaseDefinition
67
{
7-
public SqlServerDatabase(IDbConnection connection)
8-
: base(connection, new SqlServerTranslator())
8+
public IDbConnection GetNewDbConnection(string connectionString)
99
{
10+
return new SqlConnection(connectionString);
11+
}
12+
13+
public ITranslator GetTranslator()
14+
{
15+
return new SqlServerTranslator();
1016
}
1117
}
1218
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
using System.Data;
2+
using System.Data.SQLite;
23

34
namespace DataCore.Database.Sqlite
45
{
5-
public class SqliteDatabase : Database
6+
public class SqliteDatabase : IDatabaseDefinition
67
{
7-
public SqliteDatabase(IDbConnection connection)
8-
: base(connection, new SqliteTranslator())
8+
public IDbConnection GetNewDbConnection(string connectionString)
99
{
10+
return new SQLiteConnection(connectionString);
11+
}
12+
13+
public ITranslator GetTranslator()
14+
{
15+
return new SqliteTranslator();
1016
}
1117
}
1218
}

‎DataCore.Database/DataCore.Database.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
<ItemGroup>
4646
<Compile Include="Database.cs" />
4747
<Compile Include="IDatabase.cs" />
48+
<Compile Include="IDatabaseDefinition.cs" />
4849
<Compile Include="Properties\AssemblyInfo.cs" />
4950
</ItemGroup>
5051
<ItemGroup>

‎DataCore.Database/Database.cs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,24 @@
99

1010
namespace DataCore.Database
1111
{
12-
public abstract class Database : IDatabase
12+
public class Database : IDatabase
1313
{
14-
private readonly IDbConnection _connection;
14+
private readonly IDatabaseDefinition _dbDefinition;
15+
private IDbConnection _connection;
1516

16-
public ITranslator Translator { get; private set; }
17+
public ITranslator Translator { get; }
1718

18-
protected Database(IDbConnection connection, ITranslator translator)
19+
public Database(IDatabaseDefinition dbDefinition, string connectionString)
1920
{
20-
_connection = connection;
21-
Translator = translator;
21+
_dbDefinition = dbDefinition;
22+
Translator = dbDefinition.GetTranslator();
23+
24+
OpenConnection(connectionString);
25+
}
26+
27+
public void OpenConnection(string connectionString)
28+
{
29+
_connection = _dbDefinition.GetNewDbConnection(connectionString);
2230
}
2331

2432
public Query<T> From<T>()
@@ -724,17 +732,38 @@ public IEnumerable<T> Execute<T>(string query, Parameters parameters)
724732

725733
public int Execute(string query)
726734
{
735+
if (_connection == null)
736+
throw new ApplicationException("Call the method OpenConnection before executing a query.");
737+
738+
if (_connection.State == ConnectionState.Closed)
739+
_connection.Open();
740+
727741
return _connection.Execute(query);
728742
}
729743

730744
public int Execute(string query, Parameters parameters)
731745
{
746+
if (_connection == null)
747+
throw new ApplicationException("Call the method OpenConnection before executing a query.");
748+
749+
if (_connection.State == ConnectionState.Closed)
750+
_connection.Open();
751+
732752
return _connection.Execute(query, parameters.GetValues());
733753
}
734754

735755
private TableDefinition GetTableDefinition(Type type)
736756
{
737757
return new TableDefinition(type);
738758
}
759+
760+
public void Dispose()
761+
{
762+
if (_connection != null)
763+
{
764+
_connection.Close();
765+
_connection.Dispose();
766+
}
767+
}
739768
}
740769
}

‎DataCore.Database/IDatabase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
namespace DataCore.Database
66
{
7-
public interface IDatabase
7+
public interface IDatabase : IDisposable
88
{
9+
void OpenConnection(string connectionString);
10+
911
ITranslator Translator { get; }
1012

1113
int Execute(string query);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Data;
2+
3+
namespace DataCore.Database
4+
{
5+
public interface IDatabaseDefinition
6+
{
7+
IDbConnection GetNewDbConnection(string connectionString);
8+
ITranslator GetTranslator();
9+
}
10+
}

0 commit comments

Comments
 (0)