diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index cac45b44..0666a4c3 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -43,6 +43,8 @@ namespace FreeSql if (FreeSqlDbContextExtensions._dicSetDbContextOptions.TryGetValue(OrmOriginal.Ado.Identifier, out var opt)) { _optionsPriv.EnableAddOrUpdateNavigateList = opt.EnableAddOrUpdateNavigateList; + _optionsPriv.EnableGlobalFilter = opt.EnableGlobalFilter; + _optionsPriv.NoneParameter = opt.NoneParameter; _optionsPriv.OnEntityChange = opt.OnEntityChange; } } diff --git a/FreeSql.DbContext/DbContext/DbContextOptions.cs b/FreeSql.DbContext/DbContext/DbContextOptions.cs index deb9490e..e43ff5ae 100644 --- a/FreeSql.DbContext/DbContext/DbContextOptions.cs +++ b/FreeSql.DbContext/DbContext/DbContextOptions.cs @@ -27,6 +27,11 @@ namespace FreeSql /// public bool? NoneParameter { get; set; } + /// + /// 是否开启 IFreeSql GlobalFilter 功能(默认:true) + /// + public bool EnableGlobalFilter { get; set; } = true; + /// /// 实体变化事件 /// diff --git a/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs index 66310a51..2aabe397 100644 --- a/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs +++ b/FreeSql.DbContext/DbContext/DbContextScopedFreeSql.cs @@ -35,15 +35,21 @@ namespace FreeSql public ISelect Select() where T1 : class { - _resolveDbContext?.Invoke()?.FlushCommand(); - return _originalFsql.Select().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction(false)); + var db = _resolveDbContext?.Invoke(); + db?.FlushCommand(); + var select = _originalFsql.Select().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction(false)); + if (db?.Options.EnableGlobalFilter == false) select.DisableGlobalFilter(); + return select; } public ISelect Select(object dywhere) where T1 : class => Select().WhereDynamic(dywhere); public IDelete Delete() where T1 : class { - _resolveDbContext?.Invoke()?.FlushCommand(); - return _originalFsql.Delete().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction()); + var db = _resolveDbContext?.Invoke(); + db?.FlushCommand(); + var delete = _originalFsql.Delete().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction()); + if (db?.Options.EnableGlobalFilter == false) delete.DisableGlobalFilter(); + return delete; } public IDelete Delete(object dywhere) where T1 : class => Delete().WhereDynamic(dywhere); @@ -53,6 +59,7 @@ namespace FreeSql db?.FlushCommand(); var update = _originalFsql.Update().WithTransaction(_resolveUnitOfWork()?.GetOrBeginTransaction()); if (db?.Options.NoneParameter != null) update.NoneParameter(db.Options.NoneParameter.Value); + if (db?.Options.EnableGlobalFilter == false) update.DisableGlobalFilter(); return update; } public IUpdate Update(object dywhere) where T1 : class => Update().WhereDynamic(dywhere); diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs index 1314a0d1..6af6b0d2 100644 --- a/FreeSql.DbContext/DbSet/DbSet.cs +++ b/FreeSql.DbContext/DbSet/DbSet.cs @@ -33,7 +33,9 @@ namespace FreeSql protected virtual ISelect OrmSelect(object dywhere) { DbContextFlushCommand(); //查询前先提交,否则会出脏读 - return _db.OrmOriginal.Select().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere); + var select = _db.OrmOriginal.Select().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere); + if (_db.Options.EnableGlobalFilter == false) select.DisableGlobalFilter(); + return select; } ~DbSet() => this.Dispose(); @@ -65,9 +67,15 @@ namespace FreeSql { var update = _db.OrmOriginal.Update().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()); if (_db.Options.NoneParameter != null) update.NoneParameter(_db.Options.NoneParameter.Value); + if (_db.Options.EnableGlobalFilter == false) update.DisableGlobalFilter(); return update.SetSource(entitys); } - protected virtual IDelete OrmDelete(object dywhere) => _db.OrmOriginal.Delete().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere); + protected virtual IDelete OrmDelete(object dywhere) + { + var delete = _db.OrmOriginal.Delete().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere); + if (_db.Options.EnableGlobalFilter == false) delete.DisableGlobalFilter(); + return delete; + } internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) => _db.EnqueuePreCommand(changeType, this, typeof(EntityState), _entityType, state); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 650dae1f..474ea8d5 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -91,6 +91,11 @@ 使用无参数化设置(对应 IInsert/IUpdate) + + + 是否开启 IFreeSql GlobalFilter 功能(默认:true) + + 实体变化事件 @@ -481,14 +486,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index 003cc47c..8acbdf71 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -301,6 +301,25 @@ namespace FreeSql.Tests } }); + var repo_dtot22 = g.sqlite.GetRepository(); + + var dtot221 = repo_dtot22.Select.ToList(a => new gfDto + { + dto2 = new dfDto2 + { + rowstate = a.rowstate + } + }); + + repo_dtot22.DbContextOptions.EnableGlobalFilter = false; + var dtot222 = repo_dtot22.Select.ToList(a => new gfDto + { + dto2 = new dfDto2 + { + rowstate = a.rowstate + } + }); + //List<(Guid, DateTime)> contains2linqarr = new List<(Guid, DateTime)>(); //Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToSql(a => 1).Replace("\r\n", "")); //g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList();