瀏覽代碼

增加EFCore实体对比功能

懒得勤快 4 年之前
父節點
當前提交
03b9229ec7

+ 7 - 8
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -4,22 +4,22 @@
     <LangVersion>latest</LangVersion>
     <LangVersion>latest</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
     <CodeAnalysisRuleSet />
-    <Version>2.4.3.5</Version>
+    <Version>2.4.3.6</Version>
     <Authors>懒得勤快</Authors>
     <Authors>懒得勤快</Authors>
-    <Description>Masuit.Tools基础公共库</Description>
+    <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,动态编译,Excel简单导出,权重随机筛选算法,简繁转换,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,实体映射、集合扩展等常用封装。</Description>
     <Copyright>懒得勤快,长空X</Copyright>
     <Copyright>懒得勤快,长空X</Copyright>
     <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
     <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
     <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
     <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
     <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>
     <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>
-    <PackageReleaseNotes>Masuit.Tools基础公共库</PackageReleaseNotes>
+    <PackageReleaseNotes>Masuit.Tools基础公共库,如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</PackageReleaseNotes>
     <Product>Masuit.Tools.Abstractions</Product>
     <Product>Masuit.Tools.Abstractions</Product>
     <PackageId>Masuit.Tools.Abstractions</PackageId>
     <PackageId>Masuit.Tools.Abstractions</PackageId>
     <RepositoryType>Github</RepositoryType>
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.4.3.5</FileVersion>
+    <FileVersion>2.4.3.6</FileVersion>
     <Company>ldqk.org</Company>
     <Company>ldqk.org</Company>
-    <AssemblyVersion>2.4.3.5</AssemblyVersion>
+    <AssemblyVersion>2.4.3.6</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>
     <IncludeSymbols>true</IncludeSymbols>
@@ -41,9 +41,9 @@
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup>
   <ItemGroup>
-    <PackageReference Include="DnsClient" Version="1.4.0" />
+    <PackageReference Include="DnsClient" Version="1.5.0" />
     <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
     <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
-    <PackageReference Include="Microsoft.Win32.Registry" Version="4.7.0" />
+    <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
@@ -67,7 +67,6 @@
   <ItemGroup Condition=" '$(TargetFramework)' == 'net5'">
   <ItemGroup Condition=" '$(TargetFramework)' == 'net5'">
     <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
     <PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
     <PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="5.0.1" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="5.0.1" />

+ 88 - 0
Masuit.Tools.Core/Database/DbContextExt.cs

@@ -0,0 +1,88 @@
+using Microsoft.EntityFrameworkCore;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace Masuit.Tools.Core
+{
+    public class ChangePropertyValue
+    {
+        /// <summary>
+        /// 属性
+        /// </summary>
+        public PropertyInfo PropertyInfo { get; set; }
+
+        /// <summary>
+        /// 原始值
+        /// </summary>
+        public object OriginalValue { get; set; }
+
+        /// <summary>
+        /// 新值
+        /// </summary>
+        public object CurrentValue { get; set; }
+    }
+
+    public static class DbContextExt
+    {
+        /// <summary>
+        /// 获取变化的实体信息
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="db"></param>
+        /// <returns></returns>
+        public static IEnumerable<ChangePropertyValue> GetChanges<T>(this DbContext db)
+        {
+            return db.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified && e.Entity is T).SelectMany(e =>
+            {
+                var originalObject = e.OriginalValues.ToObject();
+                var currentObject = e.CurrentValues.ToObject();
+                return e.OriginalValues.Properties.Select(p => (p.PropertyInfo, Value: p.PropertyInfo.GetValue(originalObject))).Zip(e.CurrentValues.Properties.Select(p => (p.PropertyInfo, Value: p.PropertyInfo.GetValue(currentObject))), (t1, t2) => new ChangePropertyValue()
+                {
+                    PropertyInfo = t1.PropertyInfo,
+                    OriginalValue = t1.Value,
+                    CurrentValue = t2.Value
+                }).Where(t => Comparer.Default.Compare(t.OriginalValue, t.CurrentValue) != 0);
+            });
+        }
+
+        /// <summary>
+        /// 获取添加的实体信息
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="db"></param>
+        /// <returns></returns>
+        public static IEnumerable<ChangePropertyValue> GetAdded<T>(this DbContext db)
+        {
+            return db.ChangeTracker.Entries().Where(e => e.State == EntityState.Added && e.Entity is T).SelectMany(e =>
+            {
+                var currentObject = e.CurrentValues.ToObject();
+                return e.CurrentValues.Properties.Select(p => (p.PropertyInfo, Value: p.PropertyInfo.GetValue(currentObject))).Select(t => new ChangePropertyValue
+                {
+                    PropertyInfo = t.PropertyInfo,
+                    CurrentValue = t.Value
+                });
+            });
+        }
+
+        /// <summary>
+        /// 获取移除的实体信息
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="db"></param>
+        /// <returns></returns>
+        public static IEnumerable<ChangePropertyValue> GetRemoved<T>(this DbContext db)
+        {
+            return db.ChangeTracker.Entries().Where(e => e.State == EntityState.Deleted && e.Entity is T).SelectMany(e =>
+            {
+                var originalObject = e.OriginalValues.ToObject();
+                return e.OriginalValues.Properties.Select(p => (p.PropertyInfo, Value: p.PropertyInfo.GetValue(originalObject))).Select(t => new ChangePropertyValue
+                {
+                    PropertyInfo = t.PropertyInfo,
+                    OriginalValue = t.Value
+                });
+            });
+        }
+    }
+}

+ 5 - 5
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,7 +2,7 @@
 
 
     <PropertyGroup>
     <PropertyGroup>
         <TargetFrameworks>netstandard2.0;netstandard2.1;net5</TargetFrameworks>
         <TargetFrameworks>netstandard2.0;netstandard2.1;net5</TargetFrameworks>
-        <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。
+        <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,动态编译,Excel简单导出,权重随机筛选算法,简繁转换,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,实体映射、集合扩展等常用封装。
 官网教程:https://ldqk.org/55
 官网教程:https://ldqk.org/55
 github:https://github.com/ldqk/Masuit.Tools
 github:https://github.com/ldqk/Masuit.Tools
         </Description>
         </Description>
@@ -18,10 +18,10 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.3.5</Version>
-        <FileVersion>2.4.3.5</FileVersion>
+        <Version>2.4.3.6</Version>
+        <FileVersion>2.4.3.6</FileVersion>
         <Company>ldqk.org</Company>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3.5</AssemblyVersion>
+        <AssemblyVersion>2.4.3.6</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -30,7 +30,7 @@ github:https://github.com/ldqk/Masuit.Tools
     </PropertyGroup>
     </PropertyGroup>
 
 
     <ItemGroup>
     <ItemGroup>
-        <PackageReference Include="DnsClient" Version="1.4.0" />
+        <PackageReference Include="DnsClient" Version="1.5.0" />
         <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
         <PackageReference Include="HtmlSanitizer" Version="5.0.404" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0" />

+ 3 - 3
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -4,7 +4,7 @@
         <LangVersion>latest</LangVersion>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <CodeAnalysisRuleSet />
         <CodeAnalysisRuleSet />
-        <Version>1.0.2</Version>
+        <Version>1.0.3</Version>
         <Authors>懒得勤快</Authors>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools.Excel导出库</Description>
         <Description>Masuit.Tools.Excel导出库</Description>
         <Copyright>懒得勤快</Copyright>
         <Copyright>懒得勤快</Copyright>
@@ -17,9 +17,9 @@
         <RepositoryType>Github</RepositoryType>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
         <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-        <FileVersion>1.0.2</FileVersion>
+        <FileVersion>1.0.3</FileVersion>
         <Company>ldqk.org</Company>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>1.0.2</AssemblyVersion>
+        <AssemblyVersion>1.0.3</AssemblyVersion>
         <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
         <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <IncludeSymbols>true</IncludeSymbols>
         <IncludeSymbols>true</IncludeSymbols>

+ 1 - 1
Masuit.Tools.Net45/Masuit.Tools.Net45.csproj

@@ -356,7 +356,7 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="DnsClient">
     <PackageReference Include="DnsClient">
-      <Version>1.4.0</Version>
+      <Version>1.5.0</Version>
     </PackageReference>
     </PackageReference>
     <PackageReference Include="Microsoft.AspNet.Mvc">
     <PackageReference Include="Microsoft.AspNet.Mvc">
       <Version>5.2.7</Version>
       <Version>5.2.7</Version>

二進制
Masuit.Tools.Net45/Properties/AssemblyInfo.cs


+ 2 - 2
Masuit.Tools.Net45/package.nuspec

@@ -4,10 +4,10 @@
     <!--*-->
     <!--*-->
     <id>Masuit.Tools.Net45</id>
     <id>Masuit.Tools.Net45</id>
     <!--*-->
     <!--*-->
-    <version>2.4.3.5</version>
+    <version>2.4.3.6</version>
     <title>Masuit.Tools</title>
     <title>Masuit.Tools</title>
     <!--*-->
     <!--*-->
-    <authors>masuit.com</authors>
+    <authors>懒得勤快</authors>
     <owners>ldqk.org</owners>
     <owners>ldqk.org</owners>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>

+ 2 - 2
Masuit.Tools/Masuit.Tools.csproj

@@ -157,7 +157,7 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="DnsClient">
     <PackageReference Include="DnsClient">
-      <Version>1.4.0</Version>
+      <Version>1.5.0</Version>
     </PackageReference>
     </PackageReference>
     <PackageReference Include="HtmlSanitizer">
     <PackageReference Include="HtmlSanitizer">
       <Version>5.0.404</Version>
       <Version>5.0.404</Version>
@@ -172,7 +172,7 @@
       <Version>0.28.3</Version>
       <Version>0.28.3</Version>
     </PackageReference>
     </PackageReference>
     <PackageReference Include="StackExchange.Redis">
     <PackageReference Include="StackExchange.Redis">
-      <Version>2.2.4</Version>
+      <Version>2.2.50</Version>
     </PackageReference>
     </PackageReference>
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

二進制
Masuit.Tools/Properties/AssemblyInfo.cs


+ 4 - 3
Masuit.Tools/package.nuspec

@@ -4,19 +4,20 @@
     <!--*-->
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <id>Masuit.Tools.Net</id>
     <!--*-->
     <!--*-->
-    <version>2.4.3.5</version>
+    <version>2.4.3.6</version>
     <title>Masuit.Tools</title>
     <title>Masuit.Tools</title>
     <!--*-->
     <!--*-->
-    <authors>masuit.com</authors>
+    <authors>懒得勤快</authors>
     <owners>ldqk.org</owners>
     <owners>ldqk.org</owners>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <!--<iconUrl></iconUrl>-->
     <!--<iconUrl></iconUrl>-->
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
     <!--*-->
     <!--*-->
-    <description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。
+    <description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,动态编译,Excel简单导出,权重随机筛选算法,简繁转换,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,实体映射、集合扩展等常用封装。
 官网教程:https://ldqk.org/55
 官网教程:https://ldqk.org/55
 
 
+
 github:https://github.com/ldqk/Masuit.Tools</description>
 github:https://github.com/ldqk/Masuit.Tools</description>
     <!--*-->
     <!--*-->
     <releaseNotes>如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</releaseNotes>
     <releaseNotes>如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</releaseNotes>