mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
加急修复 UnitOfWork 实现的 bug
This commit is contained in:
parent
2ab59201b0
commit
89ff4ca44d
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<Version>0.3.16</Version>
|
<Version>0.3.16.1</Version>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table.</Description>
|
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table.</Description>
|
||||||
<PackageProjectUrl>https://github.com/2881099/FreeSql/wiki/Repository</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/2881099/FreeSql/wiki/Repository</PackageProjectUrl>
|
||||||
|
@ -10,7 +10,7 @@ namespace FreeSql {
|
|||||||
where TEntity : class {
|
where TEntity : class {
|
||||||
|
|
||||||
protected IFreeSql _fsql;
|
protected IFreeSql _fsql;
|
||||||
internal DbTransaction _tran;
|
internal UnitOfWork _unitOfWork;
|
||||||
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
public IDataFilter<TEntity> DataFilter { get; } = new DataFilter<TEntity>();
|
||||||
|
|
||||||
Func<string, string> _asTableVal;
|
Func<string, string> _asTableVal;
|
||||||
@ -94,14 +94,14 @@ namespace FreeSql {
|
|||||||
public Task<int> UpdateAsync(TEntity entity) => OrmUpdate(entity).ExecuteAffrowsAsync();
|
public Task<int> UpdateAsync(TEntity entity) => OrmUpdate(entity).ExecuteAffrowsAsync();
|
||||||
|
|
||||||
protected ISelect<TEntity> OrmSelect(object dywhere) {
|
protected ISelect<TEntity> OrmSelect(object dywhere) {
|
||||||
var select = _fsql.Select<TEntity>(dywhere).WithTransaction(_tran);
|
var select = _fsql.Select<TEntity>(dywhere).WithTransaction(_unitOfWork?.GetOrBeginTransaction());
|
||||||
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) select.Where(filter.Value.Expression);
|
foreach (var filter in filters) select.Where(filter.Value.Expression);
|
||||||
return select.AsTable(AsTableSelect);
|
return select.AsTable(AsTableSelect);
|
||||||
}
|
}
|
||||||
protected IUpdate<TEntity> OrmUpdate(object dywhere) {
|
protected IUpdate<TEntity> OrmUpdate(object dywhere) {
|
||||||
var entityObj = dywhere as TEntity;
|
var entityObj = dywhere as TEntity;
|
||||||
var update = _fsql.Update<TEntity>(dywhere).WithTransaction(_tran);
|
var update = _fsql.Update<TEntity>(dywhere).WithTransaction(_unitOfWork?.GetOrBeginTransaction());
|
||||||
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) {
|
foreach (var filter in filters) {
|
||||||
if (entityObj != null && filter.Value.ExpressionDelegate?.Invoke(entityObj) == false)
|
if (entityObj != null && filter.Value.ExpressionDelegate?.Invoke(entityObj) == false)
|
||||||
@ -111,14 +111,14 @@ namespace FreeSql {
|
|||||||
return update.AsTable(AsTable);
|
return update.AsTable(AsTable);
|
||||||
}
|
}
|
||||||
protected IDelete<TEntity> OrmDelete(object dywhere) {
|
protected IDelete<TEntity> OrmDelete(object dywhere) {
|
||||||
var delete = _fsql.Delete<TEntity>(dywhere).WithTransaction(_tran);
|
var delete = _fsql.Delete<TEntity>(dywhere).WithTransaction(_unitOfWork?.GetOrBeginTransaction());
|
||||||
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) delete.Where(filter.Value.Expression);
|
foreach (var filter in filters) delete.Where(filter.Value.Expression);
|
||||||
return delete.AsTable(AsTable);
|
return delete.AsTable(AsTable);
|
||||||
}
|
}
|
||||||
protected IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
protected IInsert<TEntity> OrmInsert(TEntity entity) => OrmInsert(new[] { entity });
|
||||||
protected IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys) {
|
protected IInsert<TEntity> OrmInsert(IEnumerable<TEntity> entitys) {
|
||||||
var insert = _fsql.Insert<TEntity>(entitys).WithTransaction(_tran);
|
var insert = _fsql.Insert<TEntity>(entitys).WithTransaction(_unitOfWork?.GetOrBeginTransaction());
|
||||||
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
var filters = (DataFilter as DataFilter<TEntity>)._filters.Where(a => a.Value.IsEnabled == true);
|
||||||
foreach (var filter in filters) {
|
foreach (var filter in filters) {
|
||||||
foreach (var entity in entitys)
|
foreach (var entity in entitys)
|
||||||
|
@ -18,35 +18,45 @@ namespace FreeSql {
|
|||||||
_fsql = fsql;
|
_fsql = fsql;
|
||||||
}
|
}
|
||||||
|
|
||||||
DbTransaction BeginTransaction() {
|
void ReturnObject() {
|
||||||
|
_fsql.Ado.MasterPool.Return(_conn);
|
||||||
|
_tran = null;
|
||||||
|
_conn = null;
|
||||||
|
}
|
||||||
|
internal DbTransaction GetOrBeginTransaction() {
|
||||||
|
_isCommitOrRoolback = false;
|
||||||
|
|
||||||
|
if (_tran != null) return _tran;
|
||||||
|
if (_conn != null) _fsql.Ado.MasterPool.Return(_conn);
|
||||||
|
|
||||||
_conn = _fsql.Ado.MasterPool.Get();
|
_conn = _fsql.Ado.MasterPool.Get();
|
||||||
try {
|
try {
|
||||||
_tran = _conn.Value.BeginTransaction();
|
_tran = _conn.Value.BeginTransaction();
|
||||||
} catch {
|
} catch {
|
||||||
_fsql.Ado.MasterPool.Return(_conn);
|
ReturnObject();
|
||||||
_conn = null;
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
return _tran;
|
return _tran;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Commit() {
|
public void Commit() {
|
||||||
_isCommitOrRoolback = true;
|
if (_tran != null) {
|
||||||
if (_conn != null) {
|
|
||||||
try {
|
try {
|
||||||
_tran.Commit();
|
_tran.Commit();
|
||||||
|
_isCommitOrRoolback = true;
|
||||||
} finally {
|
} finally {
|
||||||
_fsql.Ado.MasterPool.Return(_conn);
|
ReturnObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Rollback() {
|
public void Rollback() {
|
||||||
_isCommitOrRoolback = true;
|
_isCommitOrRoolback = true;
|
||||||
if (_conn != null) {
|
if (_tran != null) {
|
||||||
try {
|
try {
|
||||||
_tran.Rollback();
|
_tran.Rollback();
|
||||||
|
_isCommitOrRoolback = true;
|
||||||
} finally {
|
} finally {
|
||||||
_fsql.Ado.MasterPool.Return(_conn);
|
ReturnObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,12 +68,12 @@ namespace FreeSql {
|
|||||||
|
|
||||||
public DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
public DefaultRepository<TEntity, TKey> GetRepository<TEntity, TKey>(Expression<Func<TEntity, bool>> filter = null) where TEntity : class {
|
||||||
var repos = new DefaultRepository<TEntity, TKey>(_fsql, filter);
|
var repos = new DefaultRepository<TEntity, TKey>(_fsql, filter);
|
||||||
repos._tran = BeginTransaction();
|
repos._unitOfWork = this;
|
||||||
return repos;
|
return repos;
|
||||||
}
|
}
|
||||||
public GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class {
|
public GuidRepository<TEntity> GetGuidRepository<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<string, string> asTable = null) where TEntity : class {
|
||||||
var repos = new GuidRepository<TEntity>(_fsql, filter, asTable);
|
var repos = new GuidRepository<TEntity>(_fsql, filter, asTable);
|
||||||
repos._tran = BeginTransaction();
|
repos._unitOfWork = this;
|
||||||
return repos;
|
return repos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ using System.Reflection;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace FreeSql {
|
namespace FreeSql {
|
||||||
|
|
||||||
internal class Utils {
|
internal class Utils {
|
||||||
|
|
||||||
internal static Action<FluentDataFilter> _globalDataFilter;
|
internal static Action<FluentDataFilter> _globalDataFilter;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<Version>0.3.16</Version>
|
<Version>0.3.16.1</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
|
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user