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 source) : + base(message) + { + this.Table = table; + this.Sql = sql; + this.DbParams = DbParams; + this.Affrows = affrows; + this.EntitySource = source; + this.EntitySourceCount = source.Count(); + } + + /// + /// 更新实体的元数据 + /// + public TableInfo Table { get; } + /// + /// 执行更新的 SQL + /// + public string Sql { get; } + /// + /// 执行更新命令的参数 + /// + public DbParameter[] DbParams { get; } + + /// + /// 执行更新命令影响的行 + /// + public int Affrows { get; } + /// + /// 更新的实体数量 + /// + public int EntitySourceCount { get; } + + /// + /// 更新的实体 + /// + public IEnumerable EntitySource { get; } + } +} diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index 6bb18142..35a98726 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -52,7 +52,7 @@ namespace FreeSql.MySql.Curd try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -133,7 +133,7 @@ namespace FreeSql.MySql.Curd try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs index 44f5013d..a4585379 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.KingbaseES try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -150,7 +150,7 @@ namespace FreeSql.Odbc.KingbaseES try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index ded5aa0c..edabbb1f 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -52,7 +52,7 @@ namespace FreeSql.Odbc.MySql try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -133,7 +133,7 @@ namespace FreeSql.Odbc.MySql try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs index b713b56b..33ab8a7f 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.PostgreSQL try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -150,7 +150,7 @@ namespace FreeSql.Odbc.PostgreSQL try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index 9d441c5a..a03413b5 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -50,7 +50,7 @@ namespace FreeSql.Odbc.SqlServer try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -134,7 +134,7 @@ namespace FreeSql.Odbc.SqlServer try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index 6991e799..04b8fd09 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -53,7 +53,7 @@ namespace FreeSql.PostgreSQL.Curd try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -150,7 +150,7 @@ namespace FreeSql.PostgreSQL.Curd try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs index c5ca315e..645ab6ad 100644 --- a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs +++ b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs @@ -54,7 +54,7 @@ namespace FreeSql.ShenTong.Curd try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -151,7 +151,7 @@ namespace FreeSql.ShenTong.Curd try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index 02df6442..a6ba72af 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -51,7 +51,7 @@ namespace FreeSql.SqlServer.Curd try { ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) { @@ -135,7 +135,7 @@ namespace FreeSql.SqlServer.Curd try { ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, dbParms); - ValidateVersionAndThrow(ret.Count); + ValidateVersionAndThrow(ret.Count, sql, dbParms); } catch (Exception ex) {