diff --git a/Src/Asp.Net/ExtensionsDemo/App.config b/Src/Asp.Net/ExtensionsDemo/App.config new file mode 100644 index 000000000..88fa4027b --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Src/Asp.Net/ExtensionsDemo/CacheDemo.cs b/Src/Asp.Net/ExtensionsDemo/CacheDemo.cs new file mode 100644 index 000000000..ddc5b901d --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/CacheDemo.cs @@ -0,0 +1,52 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExtensionsDemo +{ + public class CacheDemo + { + public static void Init() + { + var myCache = new SqlSugar.Extensions.HttpRuntimeCache(); + SqlSugarClient db = new SqlSugarClient( + new ConnectionConfig() + { + ConnectionString = Config.ConnectionString, + DbType = DbType.SqlServer, + IsAutoCloseConnection = true, + ConfigureExternalServices = new ConfigureExternalServices() + { + DataInfoCacheService = myCache + } + }); + + for (int i = 0; i < 10000; i++) + { + db.Queryable().Where(it => it.Id > 0).WithCache().ToList(); + } + + db.Queryable((s1, s2) => s1.Id == s2.Id).Select(s1=>s1).WithCache().ToList(); + + db.Queryable((s1, s2) => new object[] { + JoinType.Left,s1.Id==s2.Id + }).Select(s1 => s1).WithCache().ToList(); + + Console.WriteLine("Cache Key Count:"+myCache.GetAllKey().Count()); + foreach (var item in myCache.GetAllKey()) + { + Console.WriteLine(); + Console.WriteLine(item); + Console.WriteLine(); + } + + db.Deleteable().Where(it => it.Id == 1).RemoveDataCache().ExecuteCommand(); + + Console.WriteLine("Cache Key Count:" + myCache.GetAllKey().Count()); + } + + } +} diff --git a/Src/Asp.Net/ExtensionsDemo/Config.cs b/Src/Asp.Net/ExtensionsDemo/Config.cs new file mode 100644 index 000000000..f61a858f5 --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/Config.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExtensionsDemo +{ + public class Config + { + public static string ConnectionString = "server=.;uid=sa;pwd=sasa;database=SqlSugar4XTest"; + } +} diff --git a/Src/Asp.Net/ExtensionsDemo/ExtensionsDemo.csproj b/Src/Asp.Net/ExtensionsDemo/ExtensionsDemo.csproj new file mode 100644 index 000000000..2465ef3bb --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/ExtensionsDemo.csproj @@ -0,0 +1,73 @@ + + + + + Debug + AnyCPU + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F} + Exe + Properties + ExtensionsDemo + ExtensionsDemo + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + {cdb72abe-0336-4730-a195-abf2611deeaa} + SqlSugar.Extensions.Cache + + + {489bb790-226c-4fad-8d1e-51d72a7ff8e5} + SqlSugar + + + + + \ No newline at end of file diff --git a/Src/Asp.Net/ExtensionsDemo/Models/Student.cs b/Src/Asp.Net/ExtensionsDemo/Models/Student.cs new file mode 100644 index 000000000..00119e911 --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/Models/Student.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SqlSugar; +using System.Linq.Expressions; + +namespace ExtensionsDemo +{ + [SugarTable("STudent")] + public class Student + { + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "ID")] + public int Id { get; set; } + public int? SchoolId { get; set; } + public string Name { get; set; } + public DateTime? CreateTime { get; set; } + [SugarColumn(IsIgnore=true)] + public int TestId { get; set; } + } + +} diff --git a/Src/Asp.Net/ExtensionsDemo/Program.cs b/Src/Asp.Net/ExtensionsDemo/Program.cs new file mode 100644 index 000000000..cf6187e8d --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/Program.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExtensionsDemo +{ + class Program + { + static void Main(string[] args) + { + CacheDemo.Init(); + } + } +} diff --git a/Src/Asp.Net/ExtensionsDemo/Properties/AssemblyInfo.cs b/Src/Asp.Net/ExtensionsDemo/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..9f6849829 --- /dev/null +++ b/Src/Asp.Net/ExtensionsDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("ExtensionsDemo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ExtensionsDemo")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("ebba686a-c1f0-4823-85eb-32eb306add7f")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Src/Asp.Net/SqlSugar.sln b/Src/Asp.Net/SqlSugar.sln index 05b69427a..f4c677ea1 100644 --- a/Src/Asp.Net/SqlSugar.sln +++ b/Src/Asp.Net/SqlSugar.sln @@ -15,6 +15,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OracleTest", "OracleTest\Or EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerformanceTest", "PerformanceTest\PerformanceTest.csproj", "{60D6AA62-93ED-4D02-80E4-6BEB81766D3E}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SqlSugar.Extensions", "SqlSugar.Extensions", "{B762D1DA-DFCD-4597-A14D-4F20DA0EE70E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqlSugar.Extensions.Cache", "SqlSugar.Extensions.Cache\SqlSugar.Extensions.Cache.csproj", "{CDB72ABE-0336-4730-A195-ABF2611DEEAA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtensionsDemo", "ExtensionsDemo\ExtensionsDemo.csproj", "{EBBA686A-C1F0-4823-85EB-32EB306ADD7F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,8 +51,20 @@ Global {60D6AA62-93ED-4D02-80E4-6BEB81766D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {60D6AA62-93ED-4D02-80E4-6BEB81766D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {60D6AA62-93ED-4D02-80E4-6BEB81766D3E}.Release|Any CPU.Build.0 = Release|Any CPU + {CDB72ABE-0336-4730-A195-ABF2611DEEAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDB72ABE-0336-4730-A195-ABF2611DEEAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDB72ABE-0336-4730-A195-ABF2611DEEAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDB72ABE-0336-4730-A195-ABF2611DEEAA}.Release|Any CPU.Build.0 = Release|Any CPU + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {CDB72ABE-0336-4730-A195-ABF2611DEEAA} = {B762D1DA-DFCD-4597-A14D-4F20DA0EE70E} + {EBBA686A-C1F0-4823-85EB-32EB306ADD7F} = {B762D1DA-DFCD-4597-A14D-4F20DA0EE70E} + EndGlobalSection EndGlobal diff --git a/Src/Asp.Net/SqlSugar/CacheScheme/CacheKeyBuider.cs b/Src/Asp.Net/SqlSugar/CacheScheme/CacheKeyBuider.cs index 9ed5e3aa3..80508c5b6 100644 --- a/Src/Asp.Net/SqlSugar/CacheScheme/CacheKeyBuider.cs +++ b/Src/Asp.Net/SqlSugar/CacheScheme/CacheKeyBuider.cs @@ -11,9 +11,13 @@ namespace SqlSugar { CacheKey result = new CacheKey(); result.Database = context.Context.Ado.Connection.Database; - result.Tables = new List(); - result.Tables.Add(context.EntityMaintenance.GetTableName(queryBuilder.EntityName)); - result.Tables.AddRange(queryBuilder.JoinQueryInfos.Select(it=>it.TableName)); + AddTables(context, queryBuilder, result); + AddIdentificationList(queryBuilder, result); + return result; + } + + private static void AddIdentificationList(QueryBuilder queryBuilder, CacheKey result) + { result.IdentificationList = new List(); result.IdentificationList.Add(queryBuilder.GetTableNameString); result.IdentificationList.Add(queryBuilder.GetJoinValueString); @@ -23,7 +27,33 @@ namespace SqlSugar result.IdentificationList.Add(queryBuilder.PartitionByValue); result.IdentificationList.Add(queryBuilder.Take.ObjToString()); result.IdentificationList.Add(queryBuilder.Skip.ObjToString()); - return result; + if (queryBuilder.Parameters.HasValue()) + { + foreach (var item in queryBuilder.Parameters) + { + result.IdentificationList.Add(item.ParameterName + "_" + item.Value); + } + } + } + + private static void AddTables(SqlSugarClient context, QueryBuilder queryBuilder, CacheKey result) + { + result.Tables = new List(); + result.Tables.Add(context.EntityMaintenance.GetTableName(queryBuilder.EntityName)); + if (queryBuilder.EasyJoinInfos.HasValue()) + { + foreach (var item in queryBuilder.EasyJoinInfos) + { + result.Tables.Add(context.EntityMaintenance.GetTableName(item.Value)); + } + } + if (queryBuilder.JoinQueryInfos.HasValue()) + { + foreach (var item in queryBuilder.JoinQueryInfos) + { + result.Tables.Add(queryBuilder.Builder.GetNoTranslationColumnName(item.TableName)); + } + } } } } diff --git a/Src/Asp.Net/SqlSugar/CacheScheme/CacheSchemeMain.cs b/Src/Asp.Net/SqlSugar/CacheScheme/CacheSchemeMain.cs index 6001db3cc..449dfd5b3 100644 --- a/Src/Asp.Net/SqlSugar/CacheScheme/CacheSchemeMain.cs +++ b/Src/Asp.Net/SqlSugar/CacheScheme/CacheSchemeMain.cs @@ -22,7 +22,7 @@ namespace SqlSugar { foreach (var item in keys) { - if (keys.Contains(UtilConstants.Dot + tableName + UtilConstants.Dot)) + if (item.ToLower().Contains(UtilConstants.Dot + tableName.ToLower() + UtilConstants.Dot)) { cacheService.Remove(item); } diff --git a/Src/Asp.Net/SqlSugar/Entities/CacheKey.cs b/Src/Asp.Net/SqlSugar/Entities/CacheKey.cs index c9d942414..40cd87ade 100644 --- a/Src/Asp.Net/SqlSugar/Entities/CacheKey.cs +++ b/Src/Asp.Net/SqlSugar/Entities/CacheKey.cs @@ -12,7 +12,7 @@ namespace SqlSugar public List IdentificationList { get; set; } public new string ToString() { - return "SqlSugarDataCache." + UtilConstants.Dot + string.Join(UtilConstants.Dot, this.Tables) + string.Join(UtilConstants.Dot, this.IdentificationList); + return "SqlSugarDataCache" + UtilConstants.Dot + string.Join(UtilConstants.Dot, this.Tables) +UtilConstants.Dot+ string.Join(UtilConstants.Dot, this.IdentificationList.Where(it=>it.HasValue())); } } }