diff --git a/Directory.Build.props b/Directory.Build.props
index 1fb4e591..62ea88dc 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -9,7 +9,7 @@
- 3.2.650-preview20220518
+ 3.2.650-preview20220520
diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs
index 1dad165e..4df5ae7c 100644
--- a/Examples/base_entity/Program.cs
+++ b/Examples/base_entity/Program.cs
@@ -289,6 +289,18 @@ namespace base_entity
});
sql1 = sql1.Replace("INNER JOIN ", "FULL JOIN ");
+ //fsql.Select()
+ // .ToList(a => new
+ // {
+ // users1 = fsql.Select().Where(b => b.GroupId == a.Id).ToList(false),
+ // users2 = fsql.Select().Where(b => b.GroupId == a.Id).ToList(b => new
+ // {
+ // userid = b.Id,
+ // username = b.Username
+ // }),
+ // //users3 = fsql.Ado.Query("select * from user1 where groupid = @id", new { id = a.Id })
+ // });
+
fsql.UseJsonMap();
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 7c926e6b..abe086ac 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -786,14 +786,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs
index 8490d1e8..ad55f84f 100644
--- a/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs
+++ b/FreeSql.DbContext/Repository/ContextSet/RepositoryDbSet.cs
@@ -22,8 +22,9 @@ namespace FreeSql
var filters = (_repo.DataFilter as DataFilter)._filters;
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) select.Where(filter.Value.Expression);
- var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
- if (disableFilter.Any()) select.DisableGlobalFilter();
+ var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
+ disableFilter.AddRange((_repo.DataFilter as DataFilter)._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key));
+ if (disableFilter.Any()) select.DisableGlobalFilter(disableFilter.ToArray());
return select;
}
internal ISelect OrmSelectInternal(object dywhere) => OrmSelect(dywhere);
@@ -39,8 +40,9 @@ namespace FreeSql
throw new Exception(DbContextStrings.UpdateError_Filter(filter.Key, filter.Value.Expression, _db.OrmOriginal.GetEntityString(_entityType, entity)));
update.Where(filter.Value.Expression);
}
- var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
- if (disableFilter.Any()) update.DisableGlobalFilter();
+ var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
+ disableFilter.AddRange((_repo.DataFilter as DataFilter)._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key));
+ if (disableFilter.Any()) update.DisableGlobalFilter(disableFilter.ToArray());
return update;
}
internal IUpdate OrmUpdateInternal(IEnumerable entitys) => OrmUpdate(entitys);
@@ -49,8 +51,9 @@ namespace FreeSql
var delete = base.OrmDelete(dywhere).AsTable(_repo.AsTableValueInternal);
var filters = (_repo.DataFilter as DataFilter)._filters;
foreach (var filter in filters.Where(a => a.Value.IsEnabled == true)) delete.Where(filter.Value.Expression);
- var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToArray();
- if (disableFilter.Any()) delete.DisableGlobalFilter();
+ var disableFilter = filters.Where(a => a.Value.IsEnabled == false).Select(a => a.Key).ToList();
+ disableFilter.AddRange((_repo.DataFilter as DataFilter)._filtersByOrm.Where(a => a.Value.IsEnabled == false).Select(a => a.Key));
+ if (disableFilter.Any()) delete.DisableGlobalFilter(disableFilter.ToArray());
return delete;
}
internal IDelete OrmDeleteInternal(object dywhere) => OrmDelete(dywhere);
diff --git a/FreeSql.DbContext/Repository/DataFilter/DataFilter.cs b/FreeSql.DbContext/Repository/DataFilter/DataFilter.cs
index 2d472304..17db52ca 100644
--- a/FreeSql.DbContext/Repository/DataFilter/DataFilter.cs
+++ b/FreeSql.DbContext/Repository/DataFilter/DataFilter.cs
@@ -1,8 +1,9 @@
-using System;
-using System.Collections.Generic;
+using FreeSql.Internal;
+using System;
using System.Collections.Concurrent;
-using System.Linq.Expressions;
+using System.Collections.Generic;
using System.Linq;
+using System.Linq.Expressions;
namespace FreeSql
{
@@ -48,8 +49,14 @@ namespace FreeSql
public Func ExpressionDelegate => _expressionDelegate ?? (_expressionDelegate = Expression?.Compile());
public bool IsEnabled { get; set; }
}
+ internal class FilterItemByOrm
+ {
+ public GlobalFilter.Item Filter { get; set; }
+ public bool IsEnabled { get; set; }
+ }
internal ConcurrentDictionary _filters = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase);
+ internal ConcurrentDictionary _filtersByOrm = new ConcurrentDictionary(StringComparer.CurrentCultureIgnoreCase);
public IDataFilter Apply(string filterName, Expression> filterAndValidateExp)
{
@@ -67,6 +74,7 @@ namespace FreeSql
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
List restore = new List();
+ List restoreByOrm = new List();
foreach (var name in filterName)
{
if (_filters.TryGetValue(name, out var tryfi))
@@ -77,12 +85,33 @@ namespace FreeSql
tryfi.IsEnabled = false;
}
}
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm))
+ {
+ if (tryfiByOrm.IsEnabled)
+ {
+ restoreByOrm.Add(name);
+ tryfiByOrm.IsEnabled = false;
+ }
+ }
}
- return new UsingAny(() => this.Enable(restore.ToArray()));
+ return new UsingAny(() =>
+ {
+ restore.ForEach(name =>
+ {
+ if (_filters.TryGetValue(name, out var tryfi) && tryfi.IsEnabled == false)
+ tryfi.IsEnabled = true;
+ });
+ restoreByOrm.ForEach(name =>
+ {
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == false)
+ tryfiByOrm.IsEnabled = true;
+ });
+ });
}
public IDisposable DisableAll()
{
List restore = new List();
+ List restoreByOrm = new List();
foreach (var val in _filters)
{
if (val.Value.IsEnabled)
@@ -91,7 +120,27 @@ namespace FreeSql
val.Value.IsEnabled = false;
}
}
- return new UsingAny(() => this.Enable(restore.ToArray()));
+ foreach (var val in _filtersByOrm)
+ {
+ if (val.Value.IsEnabled)
+ {
+ restoreByOrm.Add(val.Key);
+ val.Value.IsEnabled = false;
+ }
+ }
+ return new UsingAny(() =>
+ {
+ restore.ForEach(name =>
+ {
+ if (_filters.TryGetValue(name, out var tryfi) && tryfi.IsEnabled == false)
+ tryfi.IsEnabled = true;
+ });
+ restoreByOrm.ForEach(name =>
+ {
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == false)
+ tryfiByOrm.IsEnabled = true;
+ });
+ });
}
class UsingAny : IDisposable
{
@@ -111,6 +160,7 @@ namespace FreeSql
if (filterName == null || filterName.Any() == false) return new UsingAny(() => { });
List restore = new List();
+ List restoreByOrm = new List();
foreach (var name in filterName)
{
if (_filters.TryGetValue(name, out var tryfi))
@@ -121,12 +171,33 @@ namespace FreeSql
tryfi.IsEnabled = true;
}
}
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm))
+ {
+ if (tryfiByOrm.IsEnabled == false)
+ {
+ restoreByOrm.Add(name);
+ tryfiByOrm.IsEnabled = true;
+ }
+ }
}
- return new UsingAny(() => this.Disable(restore.ToArray()));
+ return new UsingAny(() =>
+ {
+ restore.ForEach(name =>
+ {
+ if (_filters.TryGetValue(name, out var tryfi) && tryfi.IsEnabled == true)
+ tryfi.IsEnabled = false;
+ });
+ restoreByOrm.ForEach(name =>
+ {
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == true)
+ tryfiByOrm.IsEnabled = false;
+ });
+ });
}
public IDisposable EnableAll()
{
List restore = new List();
+ List restoreByOrm = new List();
foreach (var val in _filters)
{
if (val.Value.IsEnabled == false)
@@ -135,13 +206,34 @@ namespace FreeSql
val.Value.IsEnabled = true;
}
}
- return new UsingAny(() => this.Disable(restore.ToArray()));
+ foreach (var val in _filtersByOrm)
+ {
+ if (val.Value.IsEnabled == false)
+ {
+ restoreByOrm.Add(val.Key);
+ val.Value.IsEnabled = true;
+ }
+ }
+ return new UsingAny(() =>
+ {
+ restore.ForEach(name =>
+ {
+ if (_filters.TryGetValue(name, out var tryfi) && tryfi.IsEnabled == true)
+ tryfi.IsEnabled = false;
+ });
+ restoreByOrm.ForEach(name =>
+ {
+ if (_filtersByOrm.TryGetValue(name, out var tryfiByOrm) && tryfiByOrm.IsEnabled == true)
+ tryfiByOrm.IsEnabled = false;
+ });
+ });
}
public bool IsEnabled(string filterName)
{
if (filterName == null) return false;
- return _filters.TryGetValue(filterName, out var tryfi) ? tryfi.IsEnabled : false;
+ return _filters.TryGetValue(filterName, out var tryfi) ? tryfi.IsEnabled :
+ _filtersByOrm.TryGetValue(filterName, out var tryfiByOrm) ? tryfiByOrm.IsEnabled : false;
}
~DataFilter() => this.Dispose();
diff --git a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
index dd9e62f0..f554860e 100644
--- a/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
+++ b/FreeSql.DbContext/Repository/Repository/BaseRepository.cs
@@ -29,6 +29,15 @@ namespace FreeSql
DataFilterUtil.SetRepositoryDataFilter(this, null);
DataFilter.Apply("", filter);
AsTable(asTable);
+
+ fsql.GlobalFilter.GetFilters().ForEach(gf =>
+ {
+ (DataFilter as DataFilter)._filtersByOrm.TryAdd(gf.Name, new DataFilter.FilterItemByOrm
+ {
+ Filter = gf,
+ IsEnabled = true
+ });
+ });
}
~BaseRepository() => this.Dispose();
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
index c1c64f53..6eec06d4 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
@@ -382,6 +382,16 @@ namespace FreeSql.Tests
var gft2 = g.mysql.Select().Where(a => a.id == Guid.NewGuid()).ToList();
var gft3 = g.mysql.Select().Where(a => a.id == Guid.NewGuid()).ToList();
+ var repo1 = g.mysql.GetRepository();
+ using (repo1.DataFilter.Disable("gft1", "gft2", "gft3"))
+ repo1.Get(Guid.NewGuid());
+ var repo2 = g.mysql.GetRepository();
+ using (repo2.DataFilter.Disable("gft1", "gft2", "gft3"))
+ repo2.Get(Guid.NewGuid());
+ var repo3 = g.mysql.GetRepository();
+ using (repo3.DataFilter.Disable("gft1", "gft2", "gft3"))
+ repo3.Get(Guid.NewGuid());
+
g.sqlserver.Delete().Where("1=1").ExecuteAffrows();
g.mysql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs
index 7593ec8c..2e3f44bf 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest5.cs
@@ -16,10 +16,17 @@ namespace FreeSql.Tests
{
public class UnitTest5
{
+
[Fact]
- public void AsTable_PropertyName_FormatErrorTest1()
+ public void TestConstDtoStringEmpty()
{
- CoreStrings.AsTable_PropertyName_FormatError("astable");
+ var fsql = g.mysql;
+ var sql = fsql.Select().ToSql(a => new
+ {
+ empty = ""
+ });
+ Assert.Equal(@"SELECT '' as1
+FROM `TestDto` a", sql);
}
// DTO
public class TestDto