diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 903f7229..af723004 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.5.3 + 0.1.6 YeXiangQin FreeSql 通用仓库层现实,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 https://github.com/2881099/FreeSql diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index b98f81ca..cdeccd30 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.5 + 0.1.6 true YeXiangQin 打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs index 5112f127..6406dfd0 100644 --- a/FreeSql/Internal/CommonUtils.cs +++ b/FreeSql/Internal/CommonUtils.cs @@ -39,7 +39,7 @@ namespace FreeSql.Internal { var table = dicConfigEntity.GetOrAdd(type, new TableAttribute()); var fluent = new TableFluent(table); entity.Invoke(fluent); - Utils.GetTableByEntity(type, this, true); //update cache + Utils.RemoveTableByEntity(type, this); //remove cache return _orm.CodeFirst; } internal ICodeFirst ConfigEntity(Type type, Action entity) { @@ -47,7 +47,7 @@ namespace FreeSql.Internal { var table = dicConfigEntity.GetOrAdd(type, new TableAttribute()); var fluent = new TableFluent(type, table); entity.Invoke(fluent); - Utils.GetTableByEntity(type, this, true); //update cache + Utils.RemoveTableByEntity(type, this); //remove cache return _orm.CodeFirst; } internal TableAttribute GetConfigEntity(Type type) { diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index bea49a99..d9fff178 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -24,10 +24,15 @@ namespace FreeSql.Internal { class Utils { static ConcurrentDictionary> _cacheGetTableByEntity = new ConcurrentDictionary>(); - internal static TableInfo GetTableByEntity(Type entity, CommonUtils common, bool isReCache = false) { + internal static void RemoveTableByEntity(Type entity, CommonUtils common) { + if (entity.FullName.StartsWith("<>f__AnonymousType")) return; + var tbc = _cacheGetTableByEntity.GetOrAdd(common.DbName, k1 => new ConcurrentDictionary()); //区分数据库类型缓存 + tbc.TryRemove(entity, out var trytb); + } + internal static TableInfo GetTableByEntity(Type entity, CommonUtils common) { if (entity.FullName.StartsWith("<>f__AnonymousType")) return null; var tbc = _cacheGetTableByEntity.GetOrAdd(common.DbName, k1 => new ConcurrentDictionary()); //区分数据库类型缓存 - if (isReCache == false && tbc.TryGetValue(entity, out var trytb)) return trytb; + if (tbc.TryGetValue(entity, out var trytb)) return trytb; if (common.CodeFirst.GetDbInfo(entity) != null) return null; var tbattr = common.GetEntityTableAttribute(entity);