From 635244786aa27811ee48bb0f8f6026ec59acdf1b Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Sun, 26 Apr 2020 00:34:50 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20=20DbContextOptions.En?=
=?UTF-8?q?ableGlobalFilter=20=E8=AE=BE=E7=BD=AE=E6=98=AF=E5=90=A6?=
=?UTF-8?q?=E5=9C=A8=20DbContext/Repository=20=E4=B8=AD=E5=90=AF=E7=94=A8?=
=?UTF-8?q?=E5=85=A8=E5=B1=80=E8=BF=87=E6=BB=A4=E5=99=A8=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/DbContext/DbContext.cs | 2 ++
.../DbContext/DbContextOptions.cs | 5 +++++
.../DbContext/DbContextScopedFreeSql.cs | 15 +++++++++++----
FreeSql.DbContext/DbSet/DbSet.cs | 12 ++++++++++--
FreeSql.DbContext/FreeSql.DbContext.xml | 14 +++++---------
FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 19 +++++++++++++++++++
6 files changed, 52 insertions(+), 15 deletions(-)
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();