From f0b09f468c1ba6eb3cf4de5111da46e9c8e16b29 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Sun, 16 Aug 2020 03:32:06 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=8C=E5=96=84=20DbUpdateVersionExcepti?=
=?UTF-8?q?on=20IsVersion=20=E8=A1=8C=E7=89=88=E6=9C=AC=E5=BC=82=E5=B8=B8?=
=?UTF-8?q?=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../FreeSql.Extensions.AdoNet.csproj | 2 +-
...ions.xml => FreeSql.Extensions.AdoNet.xml} | 0
FreeSql.DbContext/FreeSql.DbContext.xml | 9 ----
FreeSql/FreeSql.xml | 30 +++++++++++
.../Internal/CommonProvider/UpdateProvider.cs | 6 +--
.../CommonProvider/UpdateProviderAsync.cs | 2 +-
.../Exception/DbUpdateVersionException.cs | 50 +++++++++++++++++++
.../Curd/MySqlUpdate.cs | 4 +-
.../KingbaseES/Curd/OdbcKingbaseESUpdate.cs | 4 +-
.../MySql/Curd/OdbcMySqlUpdate.cs | 4 +-
.../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 4 +-
.../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +-
.../Curd/PostgreSQLUpdate.cs | 4 +-
.../Curd/ShenTongUpdate.cs | 4 +-
.../Curd/SqlServerUpdate.cs | 4 +-
15 files changed, 101 insertions(+), 30 deletions(-)
rename Extensions/FreeSql.Extensions.AdoNet/{Volo.Abp.Dapper.FreeSqlExtensions.xml => FreeSql.Extensions.AdoNet.xml} (100%)
create mode 100644 FreeSql/Internal/Exception/DbUpdateVersionException.cs
diff --git a/Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.csproj b/Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.csproj
index d1b1a589..cb964f9e 100644
--- a/Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.csproj
+++ b/Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.csproj
@@ -26,7 +26,7 @@
- Volo.Abp.Dapper.FreeSqlExtensions.xml
+ FreeSql.Extensions.AdoNet.xml
3
diff --git a/Extensions/FreeSql.Extensions.AdoNet/Volo.Abp.Dapper.FreeSqlExtensions.xml b/Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.xml
similarity index 100%
rename from Extensions/FreeSql.Extensions.AdoNet/Volo.Abp.Dapper.FreeSqlExtensions.xml
rename to Extensions/FreeSql.Extensions.AdoNet/FreeSql.Extensions.AdoNet.xml
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 2acb6679..c46aa1e3 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -527,14 +527,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index c71bee29..71cbd656 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -3237,6 +3237,36 @@
Dict:key=属性名,value=注释
+
+
+ 更新实体的元数据
+
+
+
+
+ 执行更新的 SQL
+
+
+
+
+ 执行更新命令的参数
+
+
+
+
+ 执行更新命令影响的行
+
+
+
+
+ 更新的实体数量
+
+
+
+
+ 更新的实体
+
+
创建一个过滤器
diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
index 72a31b3b..8680da3e 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
@@ -109,12 +109,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
- protected void ValidateVersionAndThrow(int affrows)
+ protected void ValidateVersionAndThrow(int affrows, string sql, DbParameter[] dbParms)
{
if (_table.VersionColumn != null && _source.Count > 0)
{
if (affrows != _source.Count)
- throw new Exception($"记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{_source.Count},影响的行数{affrows}。");
+ throw new DbUpdateVersionException($"记录可能不存在,或者【行级乐观锁】版本过旧,更新数量{_source.Count},影响的行数{affrows}。", _table, sql, dbParms, affrows, _source.Select(a => (object)a));
foreach (var d in _source)
_orm.SetEntityIncrByWithPropertyName(_table.Type, d, _table.VersionColumn.CsName, 1);
}
@@ -299,7 +299,7 @@ namespace FreeSql.Internal.CommonProvider
try
{
affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms);
- ValidateVersionAndThrow(affrows);
+ ValidateVersionAndThrow(affrows, sql, dbParms);
}
catch (Exception ex)
{
diff --git a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
index 2e85688f..4d0194aa 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
@@ -168,7 +168,7 @@ namespace FreeSql.Internal.CommonProvider
try
{
affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
- ValidateVersionAndThrow(affrows);
+ ValidateVersionAndThrow(affrows, sql, dbParms);
}
catch (Exception ex)
{
diff --git a/FreeSql/Internal/Exception/DbUpdateVersionException.cs b/FreeSql/Internal/Exception/DbUpdateVersionException.cs
new file mode 100644
index 00000000..d41ce6b1
--- /dev/null
+++ b/FreeSql/Internal/Exception/DbUpdateVersionException.cs
@@ -0,0 +1,50 @@
+using FreeSql.Internal.Model;
+using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Linq;
+using System.Text;
+
+namespace FreeSql.Internal
+{
+ public class DbUpdateVersionException : Exception
+ {
+ public DbUpdateVersionException(string message, TableInfo table, string sql, DbParameter[] dbParms, int affrows, IEnumerable