Skip to content

Commit 6352447

Browse files
2881028810
authored andcommitted
- 增加 DbContextOptions.EnableGlobalFilter 设置是否在 DbContext/Repository 中启用全局过滤器;
1 parent b41680a commit 6352447

File tree

6 files changed

+52
-15
lines changed

6 files changed

+52
-15
lines changed

FreeSql.DbContext/DbContext/DbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public DbContextOptions Options
4343
if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(OrmOriginal.Ado.Identifier, out var opt))
4444
{
4545
_optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList;
46+
_optionsPriv.EnableGlobalFilter = opt.EnableGlobalFilter;
47+
_optionsPriv.NoneParameter = opt.NoneParameter;
4648
_optionsPriv.OnEntityChange = opt.OnEntityChange;
4749
}
4850
}

FreeSql.DbContext/DbContext/DbContextOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public class DbContextOptions
2727
/// </summary>
2828
public bool? NoneParameter { get; set; }
2929

30+
/// <summary>
31+
/// 是否开启 IFreeSql GlobalFilter 功能(默认:true)
32+
/// </summary>
33+
public bool EnableGlobalFilter { get; set; } = true;
34+
3035
/// <summary>
3136
/// 实体变化事件
3237
/// </summary>

FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,21 @@ public void Dispose() { }
3535

3636
public ISelect<T1> Select<T1>() where T1 : class
3737
{
38-
_resolveDbContext?.Invoke()?.FlushCommand();
39-
return _originalFsql.Select<T1>().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction(false));
38+
var db = _resolveDbContext?.Invoke();
39+
db?.FlushCommand();
40+
var select = _originalFsql.Select<T1>().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction(false));
41+
if (db?.Options.EnableGlobalFilter == false) select.DisableGlobalFilter();
42+
return select;
4043
}
4144
public ISelect<T1> Select<T1>(object dywhere) where T1 : class => Select<T1>().WhereDynamic(dywhere);
4245

4346
public IDelete<T1> Delete<T1>() where T1 : class
4447
{
45-
_resolveDbContext?.Invoke()?.FlushCommand();
46-
return _originalFsql.Delete<T1>().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
48+
var db = _resolveDbContext?.Invoke();
49+
db?.FlushCommand();
50+
var delete = _originalFsql.Delete<T1>().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
51+
if (db?.Options.EnableGlobalFilter == false) delete.DisableGlobalFilter();
52+
return delete;
4753
}
4854
public IDelete<T1> Delete<T1>(object dywhere) where T1 : class => Delete<T1>().WhereDynamic(dywhere);
4955

@@ -53,6 +59,7 @@ public IUpdate<T1> Update<T1>() where T1 : class
5359
db?.FlushCommand();
5460
var update = _originalFsql.Update<T1>().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction());
5561
if (db?.Options.NoneParameter != null) update.NoneParameter(db.Options.NoneParameter.Value);
62+
if (db?.Options.EnableGlobalFilter == false) update.DisableGlobalFilter();
5663
return update;
5764
}
5865
public IUpdate<T1> Update<T1>(object dywhere) where T1 : class => Update<T1>().WhereDynamic(dywhere);

FreeSql.DbContext/DbSet/DbSet.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public abstract partial class DbSet<TEntity> : IDbSet where TEntity : class
3333
protected virtual ISelect<TEntity> OrmSelect(object dywhere)
3434
{
3535
DbContextFlushCommand(); //查询前先提交,否则会出脏读
36-
return _db.OrmOriginal.Select<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
36+
var select = _db.OrmOriginal.Select<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
37+
if (_db.Options.EnableGlobalFilter == false) select.DisableGlobalFilter();
38+
return select;
3739
}
3840

3941
~DbSet() => this.Dispose();
@@ -65,9 +67,15 @@ protected virtual IUpdate<TEntity> OrmUpdate(IEnumerable<TEntity> entitys)
6567
{
6668
var update = _db.OrmOriginal.Update<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction());
6769
if (_db.Options.NoneParameter != null) update.NoneParameter(_db.Options.NoneParameter.Value);
70+
if (_db.Options.EnableGlobalFilter == false) update.DisableGlobalFilter();
6871
return update.SetSource(entitys);
6972
}
70-
protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _db.OrmOriginal.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
73+
protected virtual IDelete<TEntity> OrmDelete(object dywhere)
74+
{
75+
var delete = _db.OrmOriginal.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
76+
if (_db.Options.EnableGlobalFilter == false) delete.DisableGlobalFilter();
77+
return delete;
78+
}
7179

7280
internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) =>
7381
_db.EnqueuePreCommand(changeType, this, typeof(EntityState), _entityType, state);

FreeSql.DbContext/FreeSql.DbContext.xml

Lines changed: 5 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql.Tests/FreeSql.Tests/UnitTest2.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,25 @@ public void Test02()
301301
}
302302
});
303303

304+
var repo_dtot22 = g.sqlite.GetRepository<gf_t1>();
305+
306+
var dtot221 = repo_dtot22.Select.ToList(a => new gfDto
307+
{
308+
dto2 = new dfDto2
309+
{
310+
rowstate = a.rowstate
311+
}
312+
});
313+
314+
repo_dtot22.DbContextOptions.EnableGlobalFilter = false;
315+
var dtot222 = repo_dtot22.Select.ToList(a => new gfDto
316+
{
317+
dto2 = new dfDto2
318+
{
319+
rowstate = a.rowstate
320+
}
321+
});
322+
304323
//List<(Guid, DateTime)> contains2linqarr = new List<(Guid, DateTime)>();
305324
//Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select<TestIgnoreDefaultValue>().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToSql(a => 1).Replace("\r\n", ""));
306325
//g.sqlite.Select<TestIgnoreDefaultValue>().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList();

0 commit comments

Comments
 (0)