debug Destructor #131

This commit is contained in:
28810 2019-11-15 13:25:14 +08:00
parent 6a606a82af
commit 7d1f9b126f
17 changed files with 73 additions and 100 deletions

View File

@ -4,6 +4,7 @@ using System.Collections.Concurrent;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Threading;
namespace FreeSql
{
@ -200,11 +201,10 @@ namespace FreeSql
#endregion
~DbContext() => this.Dispose();
bool _isdisposed = false;
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
_isdisposed = true;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
_actions.Clear();

View File

@ -7,6 +7,7 @@ using System.Collections.Concurrent;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Threading;
namespace FreeSql
{
@ -36,11 +37,10 @@ namespace FreeSql
}
~DbSet() => this.Dispose();
bool _isdisposed = false;
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
_isdisposed = true;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
this._dicUpdateTimes.Clear();

View File

@ -144,10 +144,7 @@ namespace FreeSql
return _filters.TryGetValue(filterName, out var tryfi) ? tryfi.IsEnabled : false;
}
~DataFilter()
{
this.Dispose();
}
~DataFilter() => this.Dispose();
public void Dispose()
{
_filters.Clear();
@ -169,10 +166,7 @@ namespace FreeSql
return this;
}
~FluentDataFilter()
{
this.Dispose();
}
~FluentDataFilter() => this.Dispose();
public void Dispose()
{
_filters.Clear();

View File

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
namespace FreeSql
@ -42,11 +43,10 @@ namespace FreeSql
}
~BaseRepository() => this.Dispose();
bool _isdisposed = false;
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
_isdisposed = true;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
_dbsetPriv?.Dispose();

View File

@ -105,18 +105,20 @@ namespace FreeSql
public DbContext.EntityChangeReport EntityChangeReport { get; } = new DbContext.EntityChangeReport();
~UnitOfWork()
{
this.Dispose();
}
bool _isdisposed = false;
~UnitOfWork() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
_isdisposed = true;
this.Rollback();
this.Close();
GC.SuppressFinalize(this);
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
this.Rollback();
this.Close();
}
finally
{
GC.SuppressFinalize(this);
}
}
}
}

View File

@ -120,14 +120,11 @@ namespace FreeSql.Internal.CommonProvider
}
}
~AdoProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~AdoProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
Transaction2[] trans = null;

View File

@ -10,6 +10,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace FreeSql.Internal.CommonProvider
@ -38,11 +39,10 @@ namespace FreeSql.Internal.CommonProvider
protected List<LambdaExpression> _whereCascadeExpression = new List<LambdaExpression>();
protected List<GlobalFilter.Item> _whereGlobalFilter;
bool _isDisponse = false;
int _disposeCounter;
~Select0Provider()
{
if (_isDisponse) return;
_isDisponse = false;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
_where.Clear();
_params.Clear();
_tables.Clear();

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions;
using System.Threading;
namespace FreeSql.MySql
{
@ -73,14 +74,11 @@ namespace FreeSql.MySql
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~MySqlProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~MySqlProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -1,10 +1,11 @@
using FreeSql.Internal;
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Linq;
using FreeSql.Odbc.Default;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace FreeSql.Odbc.Default
{
@ -86,14 +87,11 @@ namespace FreeSql.Odbc.Default
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OdbcProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OdbcProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
try
{
(this.Ado as AdoProvider)?.Dispose();

View File

@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions;
using System.Threading;
namespace FreeSql.Odbc.MySql
{
@ -51,14 +52,11 @@ namespace FreeSql.Odbc.MySql
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OdbcMySqlProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OdbcMySqlProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Threading;
namespace FreeSql.Odbc.Oracle
{
@ -52,14 +53,11 @@ namespace FreeSql.Odbc.Oracle
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OdbcOracleProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OdbcOracleProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
using System.Threading;
namespace FreeSql.Odbc.PostgreSQL
{
@ -49,14 +50,11 @@ namespace FreeSql.Odbc.PostgreSQL
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OdbcPostgreSQLProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OdbcPostgreSQLProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
using System.Threading;
namespace FreeSql.Odbc.SqlServer
{
@ -57,14 +58,11 @@ namespace FreeSql.Odbc.SqlServer
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OdbcSqlServerProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OdbcSqlServerProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -4,6 +4,7 @@ using FreeSql.Oracle.Curd;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Threading;
namespace FreeSql.Oracle
{
@ -47,14 +48,11 @@ namespace FreeSql.Oracle
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~OracleProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~OracleProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -11,6 +11,7 @@ using System.Data.Common;
using System.Linq.Expressions;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
namespace FreeSql.PostgreSQL
{
@ -100,14 +101,11 @@ namespace FreeSql.PostgreSQL
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~PostgreSQLProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~PostgreSQLProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using FreeSql.SqlServer.Curd;
using System;
using System.Collections.Generic;
using System.Threading;
namespace FreeSql.SqlServer
{
@ -58,14 +59,11 @@ namespace FreeSql.SqlServer
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~SqlServerProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~SqlServerProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}

View File

@ -4,6 +4,7 @@ using FreeSql.Sqlite.Curd;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Threading;
namespace FreeSql.Sqlite
{
@ -46,14 +47,11 @@ namespace FreeSql.Sqlite
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
~SqliteProvider()
{
this.Dispose();
}
bool _isdisposed = false;
~SqliteProvider() => this.Dispose();
int _disposeCounter;
public void Dispose()
{
if (_isdisposed) return;
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}