- 增加 OnInserted、OnUpdated、OnDeleted、OnSelected 等 AOP 方法;

This commit is contained in:
28810 2019-05-05 18:17:04 +08:00
parent e94b78199d
commit 33e992d96b
19 changed files with 376 additions and 61 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>0.5.7</Version> <Version>0.5.8</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>YeXiangQin</Authors> <Authors>YeXiangQin</Authors>
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description> <Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>

View File

@ -1882,6 +1882,26 @@
自定义实体的属性配置,方便和多个 ORM 共同使用 自定义实体的属性配置,方便和多个 ORM 共同使用
</summary> </summary>
</member> </member>
<member name="P:FreeSql.IAop.OnUpdated">
<summary>
IUpdate 执行成功后触发
</summary>
</member>
<member name="P:FreeSql.IAop.OnInserted">
<summary>
IInsert 执行成功后触发
</summary>
</member>
<member name="P:FreeSql.IAop.OnDeleted">
<summary>
IDeleted 执行成功后触发
</summary>
</member>
<member name="P:FreeSql.IAop.OnSelected">
<summary>
ISelect 执行成功后触发
</summary>
</member>
<member name="P:FreeSql.AopToListEventArgs.List"> <member name="P:FreeSql.AopToListEventArgs.List">
<summary> <summary>
可重新装饰的引用数据 可重新装饰的引用数据
@ -1932,6 +1952,61 @@
实体的属性配置 实体的属性配置
</summary> </summary>
</member> </member>
<member name="P:FreeSql.AopOnUpdatedEventArgs.Source">
<summary>
更新的实体
</summary>
</member>
<member name="P:FreeSql.AopOnInsertedEventArgs.Identity">
<summary>
执行 ExecuteIdentity 方法时有效
</summary>
</member>
<member name="P:FreeSql.AopOnDeletedEventArgs.EntityType">
<summary>
实体类型
</summary>
</member>
<member name="P:FreeSql.AopOnDeletedEventArgs.Sql">
<summary>
执行的 SQL
</summary>
</member>
<member name="P:FreeSql.AopOnDeletedEventArgs.DbParms">
<summary>
参数化命令
</summary>
</member>
<member name="P:FreeSql.AopOnDeletedEventArgs.Affrows">
<summary>
执行 ExecuteAffrows 方法时有效
</summary>
</member>
<member name="P:FreeSql.AopOnDeletedEventArgs.Returning">
<summary>
执行 ExecuteDeleted 方法时有效
</summary>
</member>
<member name="P:FreeSql.AopOnSelectedEventArgs.EntityType">
<summary>
实体类型
</summary>
</member>
<member name="P:FreeSql.AopOnSelectedEventArgs.Sql">
<summary>
执行的 SQL
</summary>
</member>
<member name="P:FreeSql.AopOnSelectedEventArgs.DbParms">
<summary>
参数化命令
</summary>
</member>
<member name="P:FreeSql.AopOnSelectedEventArgs.ReturnData">
<summary>
查询返回的对象
</summary>
</member>
<member name="P:FreeSql.ICache.Serialize"> <member name="P:FreeSql.ICache.Serialize">
<summary> <summary>
缓存数据时序列化方法,若无设置则默认使用 Json.net 缓存数据时序列化方法,若无设置则默认使用 Json.net

View File

@ -2,6 +2,7 @@
using FreeSql.DatabaseModel; using FreeSql.DatabaseModel;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection; using System.Reflection;
@ -31,6 +32,23 @@ namespace FreeSql {
/// 自定义实体的属性配置,方便和多个 ORM 共同使用 /// 自定义实体的属性配置,方便和多个 ORM 共同使用
/// </summary> /// </summary>
EventHandler<AopConfigEntityPropertyEventArgs> ConfigEntityProperty { get; set; } EventHandler<AopConfigEntityPropertyEventArgs> ConfigEntityProperty { get; set; }
/// <summary>
/// IUpdate 执行成功后触发
/// </summary>
EventHandler<AopOnUpdatedEventArgs> OnUpdated { get; set; }
/// <summary>
/// IInsert 执行成功后触发
/// </summary>
EventHandler<AopOnInsertedEventArgs> OnInserted { get; set; }
/// <summary>
/// IDeleted 执行成功后触发
/// </summary>
EventHandler<AopOnDeletedEventArgs> OnDeleted { get; set; }
/// <summary>
/// ISelect 执行成功后触发
/// </summary>
EventHandler<AopOnSelectedEventArgs> OnSelected { get; set; }
} }
public class AopToListEventArgs : EventArgs { public class AopToListEventArgs : EventArgs {
@ -107,4 +125,84 @@ namespace FreeSql {
/// </summary> /// </summary>
public ColumnAttribute ModifyResult { get; } public ColumnAttribute ModifyResult { get; }
} }
public class AopOnUpdatedEventArgs : AopOnDeletedEventArgs {
public AopOnUpdatedEventArgs(Type entityType, object source, string sql, DbParameter[] dbParms, int affrows, object returning)
: base(entityType, sql, dbParms, affrows, returning) {
this.Source = source;
}
/// <summary>
/// 更新的实体
/// </summary>
public object Source { get; }
}
public class AopOnInsertedEventArgs : AopOnUpdatedEventArgs {
public AopOnInsertedEventArgs(Type entityType, object source, string sql, DbParameter[] dbParms, int affrows, long identity, object returning)
: base(entityType, source, sql, dbParms, affrows, returning) {
this.Identity = identity;
}
/// <summary>
/// 执行 ExecuteIdentity 方法时有效
/// </summary>
public long? Identity { get; set; }
}
public class AopOnDeletedEventArgs : EventArgs {
public AopOnDeletedEventArgs(Type entityType, string sql, DbParameter[] dbParms, int affrows, object returning) {
this.EntityType = entityType;
this.Sql = sql;
this.DbParms = dbParms;
this.Affrows = affrows;
this.Returning = returning;
}
/// <summary>
/// 实体类型
/// </summary>
public Type EntityType { get; }
/// <summary>
/// 执行的 SQL
/// </summary>
public string Sql { get; }
/// <summary>
/// 参数化命令
/// </summary>
public DbParameter[] DbParms { get; }
/// <summary>
/// 执行 ExecuteAffrows 方法时有效
/// </summary>
public int Affrows { get; }
/// <summary>
/// 执行 ExecuteDeleted 方法时有效
/// </summary>
public object Returning { get; }
}
public class AopOnSelectedEventArgs : EventArgs {
public AopOnSelectedEventArgs(Type entityType, string sql, DbParameter[] dbParms, object returnData) {
this.EntityType = entityType;
this.Sql = sql;
this.DbParms = dbParms;
this.ReturnData = returnData;
}
/// <summary>
/// 实体类型
/// </summary>
public Type EntityType { get; }
/// <summary>
/// 执行的 SQL
/// </summary>
public string Sql { get; }
/// <summary>
/// 参数化命令
/// </summary>
public DbParameter[] DbParms { get; }
/// <summary>
/// 查询返回的对象
/// </summary>
public object ReturnData { get; }
}
} }

View File

@ -11,5 +11,9 @@ namespace FreeSql.Internal.CommonProvider {
public EventHandler<AopParseExpressionEventArgs> ParseExpression { get; set; } public EventHandler<AopParseExpressionEventArgs> ParseExpression { get; set; }
public EventHandler<AopConfigEntityEventArgs> ConfigEntity { get; set; } public EventHandler<AopConfigEntityEventArgs> ConfigEntity { get; set; }
public EventHandler<AopConfigEntityPropertyEventArgs> ConfigEntityProperty { get; set; } public EventHandler<AopConfigEntityPropertyEventArgs> ConfigEntityProperty { get; set; }
public EventHandler<AopOnUpdatedEventArgs> OnUpdated { get; set; }
public EventHandler<AopOnInsertedEventArgs> OnInserted { get; set; }
public EventHandler<AopOnDeletedEventArgs> OnDeleted { get; set; }
public EventHandler<AopOnSelectedEventArgs> OnSelected { get; set; }
} }
} }

View File

@ -13,7 +13,6 @@ namespace FreeSql.Internal.CommonProvider {
protected IFreeSql _orm; protected IFreeSql _orm;
protected CommonUtils _commonUtils; protected CommonUtils _commonUtils;
protected CommonExpression _commonExpression; protected CommonExpression _commonExpression;
protected List<T1> _source = new List<T1>();
protected TableInfo _table; protected TableInfo _table;
protected Func<string, string> _tableRule; protected Func<string, string> _tableRule;
protected StringBuilder _where = new StringBuilder(); protected StringBuilder _where = new StringBuilder();
@ -32,7 +31,6 @@ namespace FreeSql.Internal.CommonProvider {
} }
protected void ClearData() { protected void ClearData() {
_source.Clear();
_where.Clear(); _where.Clear();
_whereTimes = 0; _whereTimes = 0;
_params.Clear(); _params.Clear();
@ -52,14 +50,18 @@ namespace FreeSql.Internal.CommonProvider {
public int ExecuteAffrows() { public int ExecuteAffrows() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params.ToArray()); var dbParms = _params.ToArray();
var affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, affrows, null));
this.ClearData(); this.ClearData();
return affrows; return affrows;
} }
async public Task<int> ExecuteAffrowsAsync() { async public Task<int> ExecuteAffrowsAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params.ToArray()); var dbParms = _params.ToArray();
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, affrows, null));
this.ClearData(); this.ClearData();
return affrows; return affrows;
} }

View File

@ -323,8 +323,18 @@ namespace FreeSql.Internal.CommonProvider {
} }
#endregion #endregion
internal int RawExecuteAffrows() => _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, ToSql(), _params); internal int RawExecuteAffrows() {
internal Task<int> RawExecuteAffrowsAsync() => _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, ToSql(), _params); var sql = ToSql();
var affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, affrows, 0, null));
return affrows;
}
async internal Task<int> RawExecuteAffrowsAsync() {
var sql = ToSql();
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, affrows, 0, null));
return affrows;
}
internal abstract long RawExecuteIdentity(); internal abstract long RawExecuteIdentity();
internal abstract Task<long> RawExecuteIdentityAsync(); internal abstract Task<long> RawExecuteIdentityAsync();
internal abstract List<T1> RawExecuteInserted(); internal abstract List<T1> RawExecuteInserted();

View File

@ -215,15 +215,23 @@ namespace FreeSql.Internal.CommonProvider {
var sql = this.ToSql(field); var sql = this.ToSql(field);
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql;
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
_orm.Ado.ExecuteDataTable(_connection, _transaction, CommandType.Text, sql, _params.ToArray())); var dbParms = _params.ToArray();
var ret = _orm.Ado.ExecuteDataTable(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
return ret;
});
} }
public Task<DataTable> ToDataTableAsync(string field = null) { public Task<DataTable> ToDataTableAsync(string field = null) {
var sql = this.ToSql(field); var sql = this.ToSql(field);
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql;
return _orm.Cache.ShellAsync(_cache.key, _cache.seconds, () => return _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
_orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, _params.ToArray())); var dbParms = _params.ToArray();
var ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
return ret;
});
} }
public List<TTuple> ToList<TTuple>(string field) { public List<TTuple> ToList<TTuple>(string field) {
@ -231,12 +239,14 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql;
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => { return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
List<TTuple> ret = new List<TTuple>(); var ret = new List<TTuple>();
Type type = typeof(TTuple); var type = typeof(TTuple);
var dbParms = _params.ToArray();
_orm.Ado.ExecuteReader(_connection, _transaction, dr => { _orm.Ado.ExecuteReader(_connection, _transaction, dr => {
var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils); var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils);
ret.Add((TTuple) read.Value); ret.Add((TTuple) read.Value);
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -247,13 +257,15 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = sql;
return _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => { return _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
List<TTuple> ret = new List<TTuple>(); var ret = new List<TTuple>();
Type type = typeof(TTuple); var type = typeof(TTuple);
var dbParms = _params.ToArray();
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => {
var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils); var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils);
ret.Add((TTuple) read.Value); ret.Add((TTuple) read.Value);
return Task.CompletedTask; return Task.CompletedTask;
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -264,10 +276,12 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}"; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}";
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => { return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
List<T1> ret = new List<T1>(); var ret = new List<T1>();
var dbParms = _params.ToArray();
_orm.Ado.ExecuteReader(_connection, _transaction, dr => { _orm.Ado.ExecuteReader(_connection, _transaction, dr => {
ret.Add(af.Read(_orm, dr)); ret.Add(af.Read(_orm, dr));
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -278,11 +292,13 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}"; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}";
return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => { return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
List<T1> ret = new List<T1>(); var ret = new List<T1>();
var dbParms = _params.ToArray();
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => {
ret.Add(af.Read(_orm, dr)); ret.Add(af.Read(_orm, dr));
return Task.CompletedTask; return Task.CompletedTask;
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -309,12 +325,14 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}"; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}";
return _orm.Cache.Shell(_cache.key, _cache.seconds, () => { return _orm.Cache.Shell(_cache.key, _cache.seconds, () => {
List<TReturn> ret = new List<TReturn>(); var ret = new List<TReturn>();
Type type = typeof(TReturn); var type = typeof(TReturn);
var dbParms = _params.ToArray();
_orm.Ado.ExecuteReader(_connection, _transaction, dr => { _orm.Ado.ExecuteReader(_connection, _transaction, dr => {
var index = -1; var index = -1;
ret.Add((TReturn) _commonExpression.ReadAnonymous(af.map, dr, ref index, false)); ret.Add((TReturn) _commonExpression.ReadAnonymous(af.map, dr, ref index, false));
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -325,13 +343,15 @@ namespace FreeSql.Internal.CommonProvider {
if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}"; if (_cache.seconds > 0 && string.IsNullOrEmpty(_cache.key)) _cache.key = $"{sql}{string.Join("|", _params.Select(a => a.Value))}";
return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => { return await _orm.Cache.ShellAsync(_cache.key, _cache.seconds, async () => {
List<TReturn> ret = new List<TReturn>(); var ret = new List<TReturn>();
Type type = typeof(TReturn); var type = typeof(TReturn);
var dbParms = _params.ToArray();
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => {
var index = -1; var index = -1;
ret.Add((TReturn) _commonExpression.ReadAnonymous(af.map, dr, ref index, false)); ret.Add((TReturn) _commonExpression.ReadAnonymous(af.map, dr, ref index, false));
return Task.CompletedTask; return Task.CompletedTask;
}, CommandType.Text, sql, _params.ToArray()); }, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
_orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret)); _orm.Aop.ToList?.Invoke(this, new AopToListEventArgs(ret));
_trackToList?.Invoke(ret); _trackToList?.Invoke(ret);
return ret; return ret;
@ -709,8 +729,20 @@ namespace FreeSql.Internal.CommonProvider {
return this.ToSql(af.field); return this.ToSql(af.field);
} }
protected DataTable InternalToDataTable(Expression select) => _orm.Ado.ExecuteDataTable(_connection, _transaction, CommandType.Text, this.InternalToSql<int>(select), _params.ToArray()); protected DataTable InternalToDataTable(Expression select) {
protected Task<DataTable> InternalToDataTableAsync(Expression select) => _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, this.InternalToSql<int>(select), _params.ToArray()); var sql = this.InternalToSql<int>(select);
var dbParms = _params.ToArray();
var ret = _orm.Ado.ExecuteDataTable(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
return ret;
}
async protected Task<DataTable> InternalToDataTableAsync(Expression select) {
var sql = this.InternalToSql<int>(select);
var dbParms = _params.ToArray();
var ret = await _orm.Ado.ExecuteDataTableAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnSelected?.Invoke(this, new AopOnSelectedEventArgs(_tables[0].Table.Type, sql, dbParms, ret));
return ret;
}
protected TReturn InternalToAggregate<TReturn>(Expression select) { protected TReturn InternalToAggregate<TReturn>(Expression select) {
var map = new ReadAnonymousTypeInfo(); var map = new ReadAnonymousTypeInfo();

View File

@ -239,14 +239,18 @@ namespace FreeSql.Internal.CommonProvider {
internal int RawExecuteAffrows() { internal int RawExecuteAffrows() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray()); var dbParms = _params.Concat(_paramsSource).ToArray();
var affrows = _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, null, sql, dbParms, affrows, 0, null));
ValidateVersionAndThrow(affrows); ValidateVersionAndThrow(affrows);
return affrows; return affrows;
} }
async internal Task<int> RawExecuteAffrowsAsync() { async internal Task<int> RawExecuteAffrowsAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray()); var dbParms = _params.Concat(_paramsSource).ToArray();
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, null, sql, dbParms, affrows, 0, null));
ValidateVersionAndThrow(affrows); ValidateVersionAndThrow(affrows);
return affrows; return affrows;
} }

View File

@ -24,7 +24,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }
@ -41,7 +44,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }

View File

@ -23,13 +23,19 @@ namespace FreeSql.MySql.Curd {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();");
var ret = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng) ? trylng : 0;
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, ret, null));
return ret;
} }
async internal override Task<long> RawExecuteIdentityAsync() { async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT LAST_INSERT_ID();");
var ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng) ? trylng : 0;
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, ret, null));
return ret;
} }
internal override List<T1> RawExecuteInserted() { internal override List<T1> RawExecuteInserted() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -44,7 +50,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
return _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
async internal override Task<List<T1>> RawExecuteInsertedAsync() { async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -59,7 +68,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
return await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
} }
} }

View File

@ -33,7 +33,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }
@ -50,7 +53,10 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }

View File

@ -86,13 +86,18 @@ namespace FreeSql.Oracle.Curd {
if (_identCol == null || _source.Count > 1) { if (_identCol == null || _source.Count > 1) {
_orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, null));
return 0; return 0;
} }
var identColName = _commonUtils.QuoteSqlName(_identCol.Attribute.Name); var identColName = _commonUtils.QuoteSqlName(_identCol.Attribute.Name);
var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.Attribute.MapType, 0) as OracleParameter; var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.Attribute.MapType, 0) as OracleParameter;
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
_orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}", _params.Concat(new[] { identParam }).ToArray()); sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
return long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0; var dbParms = _params.Concat(new[] { identParam }).ToArray();
_orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, dbParms);
long.TryParse(string.Concat(identParam.Value), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, dbParms, 0, trylng, null));
return trylng;
} }
async internal override Task<long> RawExecuteIdentityAsync() { async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -100,13 +105,18 @@ namespace FreeSql.Oracle.Curd {
if (_identCol == null || _source.Count > 1) { if (_identCol == null || _source.Count > 1) {
await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, null));
return 0; return 0;
} }
var identColName = _commonUtils.QuoteSqlName(_identCol.Attribute.Name); var identColName = _commonUtils.QuoteSqlName(_identCol.Attribute.Name);
var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.Attribute.MapType, 0) as OracleParameter; var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.Attribute.MapType, 0) as OracleParameter;
identParam.Direction = ParameterDirection.Output; identParam.Direction = ParameterDirection.Output;
await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}", _params.Concat(new[] { identParam }).ToArray()); sql = $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}";
return long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0; var dbParms = _params.Concat(new[] { identParam }).ToArray();
await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, dbParms);
long.TryParse(string.Concat(identParam.Value), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, dbParms, 0, trylng, null));
return trylng;
} }
internal override List<T1> RawExecuteInserted() { internal override List<T1> RawExecuteInserted() {

View File

@ -24,7 +24,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }
@ -41,7 +44,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }

View File

@ -27,9 +27,13 @@ namespace FreeSql.PostgreSQL.Curd {
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) { if (identCols.Any() == false) {
_orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params); _orm.Ado.ExecuteNonQuery(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, null));
return 0; return 0;
} }
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name));
long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
async internal override Task<long> RawExecuteIdentityAsync() { async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -38,9 +42,13 @@ namespace FreeSql.PostgreSQL.Curd {
var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true); var identCols = _table.Columns.Where(a => a.Value.Attribute.IsIdentity == true);
if (identCols.Any() == false) { if (identCols.Any() == false) {
await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params); await _orm.Ado.ExecuteNonQueryAsync(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, null));
return 0; return 0;
} }
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name));
long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
internal override List<T1> RawExecuteInserted() { internal override List<T1> RawExecuteInserted() {
@ -56,7 +64,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
return _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
async internal override Task<List<T1>> RawExecuteInsertedAsync() { async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -71,7 +82,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
return await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
} }
} }

View File

@ -33,7 +33,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }
@ -50,7 +53,10 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sb.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }

View File

@ -30,7 +30,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx)); sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx)); sb.Append(sql.Substring(validx));
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }
@ -52,7 +55,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx)); sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx)); sb.Append(sql.Substring(validx));
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.ToArray()); sql = sb.ToString();
var dbParms = _params.ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnDeleted?.Invoke(this, new AopOnDeletedEventArgs(_table.Type, sql, dbParms, 0, ret));
this.ClearData(); this.ClearData();
return ret; return ret;
} }

View File

@ -26,13 +26,19 @@ namespace FreeSql.SqlServer.Curd {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
async internal override Task<long> RawExecuteIdentityAsync() { async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT SCOPE_IDENTITY();");
long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
internal override List<T1> RawExecuteInserted() { internal override List<T1> RawExecuteInserted() {
@ -53,7 +59,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
return _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
async internal override Task<List<T1>> RawExecuteInsertedAsync() { async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
@ -73,7 +82,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx + 1)); sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1)); sb.Append(sql.Substring(validx + 1));
return await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params); sql = sb.ToString();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, _params);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, 0, ret));
return ret;
} }
} }
} }

View File

@ -39,7 +39,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx)); sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx)); sb.Append(sql.Substring(validx));
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = _orm.Ado.Query<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }
@ -61,7 +64,10 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx)); sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx)); sb.Append(sql.Substring(validx));
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray()); sql = sb.ToString();
var dbParms = _params.Concat(_paramsSource).ToArray();
var ret = await _orm.Ado.QueryAsync<T1>(_connection, _transaction, CommandType.Text, sql, dbParms);
_orm.Aop.OnUpdated?.Invoke(this, new AopOnUpdatedEventArgs(_table.Type, _source, sql, dbParms, 0, ret));
ValidateVersionAndThrow(ret.Count); ValidateVersionAndThrow(ret.Count);
return ret; return ret;
} }

View File

@ -25,13 +25,19 @@ namespace FreeSql.Sqlite.Curd {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT last_insert_rowid();");
long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
async internal override Task<long> RawExecuteIdentityAsync() { async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql(); var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0; if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0; sql = string.Concat(sql, "; SELECT last_insert_rowid();");
long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_connection, _transaction, CommandType.Text, sql, _params)), out var trylng);
_orm.Aop.OnInserted?.Invoke(this, new AopOnInsertedEventArgs(_table.Type, _source, sql, _params, 0, trylng, null));
return trylng;
} }
internal override List<T1> RawExecuteInserted() { internal override List<T1> RawExecuteInserted() {
var sql = this.ToSql(); var sql = this.ToSql();