diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 2acb6679..5ca74890 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -130,13 +130,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 @@ -527,14 +520,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs index 5a824785..40d64009 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs @@ -937,6 +937,8 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE"" public void AsTable() { g.dameng.CodeFirst.SyncStructure(typeof(Topic), "TB_TOPIC"); + g.dameng.CodeFirst.SyncStructure(typeof(Topic), "TB_TOPIC"); + g.dameng.CodeFirst.SyncStructure(typeof(Topic), "TB_TOPIC", isForceSync: true); var listt = select.AsTable((a, b) => "(select * from tb_topic where clicks > 10)").Page(1, 10).ToList(); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 36068d41..91e5723b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -3065,13 +3065,14 @@ - + 同步实体类型到数据库(指定表名) 注意:生产环境中谨慎使用 实体类型 指定表名对比 + 强制同步结构,无视缓存每次都同步 diff --git a/FreeSql/Interface/ICodeFirst.cs b/FreeSql/Interface/ICodeFirst.cs index 02393445..8aa20684 100644 --- a/FreeSql/Interface/ICodeFirst.cs +++ b/FreeSql/Interface/ICodeFirst.cs @@ -80,7 +80,8 @@ namespace FreeSql /// /// 实体类型 /// 指定表名对比 - void SyncStructure(Type entityType, string tableName); + /// 强制同步结构,无视缓存每次都同步 + void SyncStructure(Type entityType, string tableName, bool isForceSync = false); /// /// 根据 System.Type 获取数据库信息 diff --git a/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs b/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs index e2e4cdad..bff2baa9 100644 --- a/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs +++ b/FreeSql/Internal/CommonProvider/CodeFirstProvider.cs @@ -69,7 +69,7 @@ namespace FreeSql.Internal.CommonProvider static object syncStructureLock = new object(); object _dicSycedLock = new object(); - ConcurrentDictionary> _dicSynced = new ConcurrentDictionary>(); + public ConcurrentDictionary> _dicSynced = new ConcurrentDictionary>(); internal ConcurrentDictionary _dicSycedGetOrAdd(Type entityType) { if (_dicSynced.TryGetValue(entityType, out var trydic) == false) @@ -85,8 +85,12 @@ namespace FreeSql.Internal.CommonProvider this.SyncStructure(new TypeAndName(typeof(TEntity), "")); public void SyncStructure(params Type[] entityTypes) => this.SyncStructure(entityTypes?.Distinct().Select(a => new TypeAndName(a, "")).ToArray()); - public void SyncStructure(Type entityType, string tableName) => - this.SyncStructure(new TypeAndName(entityType, GetTableNameLowerOrUpper(tableName))); + public void SyncStructure(Type entityType, string tableName, bool isForceSync) + { + tableName = GetTableNameLowerOrUpper(tableName); + if (isForceSync && _dicSynced.TryGetValue(entityType, out var dic)) dic.TryRemove(tableName, out var old); + this.SyncStructure(new TypeAndName(entityType, tableName)); + } protected void SyncStructure(params TypeAndName[] objects) { if (objects == null) return;