diff --git a/src/Data.Common/ADO.NET/FileConnection.cs b/src/Data.Common/ADO.NET/FileConnection.cs
index 5fd7221..07c4be1 100644
--- a/src/Data.Common/ADO.NET/FileConnection.cs
+++ b/src/Data.Common/ADO.NET/FileConnection.cs
@@ -201,7 +201,6 @@ public override void ChangeDatabase(string databaseName)
///
public override void Close()
{
- (DataSourceProvider as IDisposable)?.Dispose();
state = ConnectionState.Closed;
}
@@ -233,6 +232,9 @@ public override void Close()
///
public override void Open()
{
+ if (State == ConnectionState.Open)
+ throw new InvalidOperationException("Connection is already open.");
+
if (DataSourceProvider is null)
{
if (!CreateIfNotExist)
@@ -322,11 +324,15 @@ public override ValueTask DisposeAsync()
///
/// Disposes the connection.
///
- protected new void Dispose()
+ protected override void Dispose(bool disposing)
{
- (DataSourceProvider as IDisposable)?.Dispose();
- base.Dispose();
- state = ConnectionState.Closed;
+ if (disposing)
+ {
+ (DataSourceProvider as IDisposable)?.Dispose();
+ DataSourceProvider = null;
+ state = ConnectionState.Closed;
+ }
+ base.Dispose(disposing);
}
private DataTable GetTablesSchema()
diff --git a/src/Data.Common/ADO.NET/FileDataReader.cs b/src/Data.Common/ADO.NET/FileDataReader.cs
index 235d5e2..64492d5 100644
--- a/src/Data.Common/ADO.NET/FileDataReader.cs
+++ b/src/Data.Common/ADO.NET/FileDataReader.cs
@@ -85,7 +85,11 @@ public override int RecordsAffected
///
public override bool HasRows => result.HasRows;
- public override void Close() => Dispose();
+ public override void Close()
+ {
+ log.LogDebug($"{GetType()}.{nameof(Close)}() called.");
+ fileReader.Dispose();
+ }
///
/// Advances to the next result, when reading the results of batch SQL statements.
@@ -714,10 +718,9 @@ public override ValueTask DisposeAsync()
///
/// Disposes of the resources used by this instance.
///
- protected new void Dispose()
+ protected override void Dispose(bool disposing)
{
- log.LogDebug($"{GetType()}.{nameof(Dispose)}() called.");
- fileReader.Dispose();
+ base.Dispose(disposing);
}
///
diff --git a/src/Data.Common/ADO.NET/FileTransaction.cs b/src/Data.Common/ADO.NET/FileTransaction.cs
index 068424d..a3f4532 100644
--- a/src/Data.Common/ADO.NET/FileTransaction.cs
+++ b/src/Data.Common/ADO.NET/FileTransaction.cs
@@ -115,15 +115,18 @@ public override ValueTask DisposeAsync()
#endif
///
- protected new void Dispose()
+ protected override void Dispose(bool disposing)
{
- log.LogDebug($"{GetType()}.{nameof(Dispose)}() called.");
+ if (disposing)
+ {
+ log.LogDebug($"{GetType()}.{nameof(Dispose)}() called.");
- if (!TransactionDone)
- Rollback();
+ if (!TransactionDone)
+ Rollback();
- base.Dispose();
- Writers.Clear();
+ Writers.Clear();
+ }
+ base.Dispose(disposing);
}
///
diff --git a/tests/Data.Tests.Common/InsertTests.cs b/tests/Data.Tests.Common/InsertTests.cs
index 37534c2..2393b92 100644
--- a/tests/Data.Tests.Common/InsertTests.cs
+++ b/tests/Data.Tests.Common/InsertTests.cs
@@ -24,6 +24,7 @@ public static void Insert_ShouldInsertData(Func(Func