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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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