mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-22 20:13:41 +08:00
Update Core
This commit is contained in:
@@ -38,7 +38,7 @@ namespace OrmTest.Demo
|
||||
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
|
||||
{
|
||||
ConnectionString = Config.ConnectionString,
|
||||
DbType = DbType.SqlServer,
|
||||
DbType = DbType.Oracle,
|
||||
IsAutoCloseConnection = true,
|
||||
InitKeyType = InitKeyType.Attribute
|
||||
});
|
||||
|
@@ -17,25 +17,11 @@ namespace OrmTest
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
//throw new Exception("Oracle developed 75%,to be continued");
|
||||
|
||||
|
||||
// /***Unit Test***/
|
||||
new Select(1).Init();
|
||||
new Field(1).Init();
|
||||
// new Where(1).Init();
|
||||
//new Method(1).Init();
|
||||
//new JoinQuery(1).Init();
|
||||
//new SingleQuery(1).Init();
|
||||
//new SelectQuery(1).Init();
|
||||
//new AutoClose(1).Init();
|
||||
//new Insert(1).Init();
|
||||
//new Delete(1).Init();
|
||||
//new Update(1).Init();
|
||||
//new Mapping(1).Init();
|
||||
//new DataTest(1).Init();
|
||||
//new EnumTest(1).Init();
|
||||
///***Performance Test***/
|
||||
//new SqlSugarPerformance(100).Select();
|
||||
|
||||
|
||||
/***Demo***/
|
||||
OrmTest.Demo.Query.Init();
|
||||
@@ -46,7 +32,7 @@ namespace OrmTest
|
||||
OrmTest.Demo.JoinSql.Init();
|
||||
OrmTest.Demo.Filter.Init();
|
||||
OrmTest.Demo.ComplexModel.Init();
|
||||
//OrmTest.Demo.CodeFirst.Init();
|
||||
OrmTest.Demo.CodeFirst.Init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -35,6 +35,9 @@ namespace SqlSugar
|
||||
internal CommandType OldCommandType { get; set; }
|
||||
internal bool OldClearParameters { get; set; }
|
||||
public IDataParameterCollection DataReaderParameters { get; set; }
|
||||
public TimeSpan SqlExecutionTime { get { return AfterTime - BeforeTime; } }
|
||||
internal DateTime BeforeTime = DateTime.MinValue;
|
||||
internal DateTime AfterTime = DateTime.MinValue;
|
||||
public virtual IDbBind DbBind
|
||||
{
|
||||
get
|
||||
@@ -57,6 +60,7 @@ namespace SqlSugar
|
||||
public virtual Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> ProcessingEventStartingSQL { get; set; }
|
||||
protected virtual Func<string,string> FormatSql { get; set; }
|
||||
public virtual Action<Exception> ErrorEvent { get; set; }
|
||||
public virtual Action<DiffLogModel> DiffLogEvent { get; set; }
|
||||
public virtual List<IDbConnection> SlaveConnections { get; set; }
|
||||
public virtual IDbConnection MasterConnection { get; set; }
|
||||
#endregion
|
||||
@@ -106,11 +110,14 @@ namespace SqlSugar
|
||||
|
||||
if (this.IsMasterSlaveSeparation)
|
||||
{
|
||||
foreach (var slaveConnection in this.SlaveConnections)
|
||||
if (this.SlaveConnections != null)
|
||||
{
|
||||
if (slaveConnection != null && slaveConnection.State == ConnectionState.Open)
|
||||
foreach (var slaveConnection in this.SlaveConnections)
|
||||
{
|
||||
slaveConnection.Dispose();
|
||||
if (slaveConnection != null && slaveConnection.State == ConnectionState.Open)
|
||||
{
|
||||
slaveConnection.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -662,6 +669,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual void ExecuteBefore(string sql, SugarParameter[] parameters)
|
||||
{
|
||||
this.BeforeTime = DateTime.Now;
|
||||
if (this.IsEnableLogEvent)
|
||||
{
|
||||
Action<string, SugarParameter[]> action = LogEventStarting;
|
||||
@@ -680,6 +688,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual void ExecuteAfter(string sql, SugarParameter[] parameters)
|
||||
{
|
||||
this.AfterTime = DateTime.Now;
|
||||
var hasParameter = parameters.HasValue();
|
||||
if (hasParameter)
|
||||
{
|
||||
|
@@ -14,6 +14,7 @@ namespace SqlSugar
|
||||
this.Context.Ado.IsEnableLogEvent = true;
|
||||
}
|
||||
private SqlSugarClient Context { get; set; }
|
||||
public Action<DiffLogModel> OnDiffLogEvent { set { this.Context.Ado.DiffLogEvent = value; } }
|
||||
public Action<Exception> OnError { set { this.Context.Ado.ErrorEvent = value; } }
|
||||
public Action<string, SugarParameter[]> OnLogExecuting { set { this.Context.Ado.LogEventStarting = value; } }
|
||||
public Action<string, SugarParameter[]> OnLogExecuted { set { this.Context.Ado.LogEventCompleted = value; } }
|
||||
|
@@ -11,7 +11,7 @@ namespace SqlSugar
|
||||
public virtual SqlSugarClient Context { get; set; }
|
||||
private bool IsBackupTable { get; set; }
|
||||
private int MaxBackupDataRows { get; set; }
|
||||
private int DefultLength { get; set; }
|
||||
protected virtual int DefultLength { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
@@ -162,8 +162,8 @@ namespace SqlSugar
|
||||
{
|
||||
var dbColumn = dbColumns.FirstOrDefault(dc => dc.DbColumnName.Equals(item.DbColumnName, StringComparison.CurrentCultureIgnoreCase));
|
||||
if (dbColumn == null) continue;
|
||||
var pkDiff = item.IsPrimarykey != dbColumn.IsPrimarykey;
|
||||
var idEntityDiff = item.IsIdentity != dbColumn.IsIdentity;
|
||||
bool pkDiff, idEntityDiff;
|
||||
KeyAction(item, dbColumn, out pkDiff, out idEntityDiff);
|
||||
if (dbColumn != null && pkDiff && !idEntityDiff)
|
||||
{
|
||||
var isAdd = item.IsPrimarykey;
|
||||
@@ -188,6 +188,12 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void KeyAction(EntityColumnInfo item, DbColumnInfo dbColumn, out bool pkDiff, out bool idEntityDiff)
|
||||
{
|
||||
pkDiff = item.IsPrimarykey != dbColumn.IsPrimarykey;
|
||||
idEntityDiff = item.IsIdentity != dbColumn.IsIdentity;
|
||||
}
|
||||
|
||||
protected virtual void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName);
|
||||
|
@@ -53,6 +53,7 @@ namespace SqlSugar
|
||||
private static readonly MethodInfo getTime = typeof(IDataRecordExtensions).GetMethod("GetTime");
|
||||
private static readonly MethodInfo getConvertDecimal = typeof(IDataRecordExtensions).GetMethod("GetConvertDecimal");
|
||||
private static readonly MethodInfo getConvertDouble = typeof(IDataRecordExtensions).GetMethod("GetConvertDouble");
|
||||
private static readonly MethodInfo getConvertDoubleToFloat = typeof(IDataRecordExtensions).GetMethod("GetConvertDoubleToFloat");
|
||||
private static readonly MethodInfo getConvertGuid = typeof(IDataRecordExtensions).GetMethod("GetConvertGuid");
|
||||
private static readonly MethodInfo getConvertInt16 = typeof(IDataRecordExtensions).GetMethod("GetConvertInt16");
|
||||
private static readonly MethodInfo getConvertInt32 = typeof(IDataRecordExtensions).GetMethod("GetConvertInt32");
|
||||
@@ -265,6 +266,9 @@ namespace SqlSugar
|
||||
method = isNullableType ? getConvertDouble : getDouble;
|
||||
else
|
||||
method = isNullableType ? getConvertFloat : getFloat;
|
||||
if (dbTypeName == "float" && isNullableType && bindProperyTypeName == "single") {
|
||||
method = getConvertDoubleToFloat;
|
||||
}
|
||||
break;
|
||||
case CSharpDataType.Guid:
|
||||
CheckType(bind.GuidThrow, bindProperyTypeName, validPropertyName, propertyName);
|
||||
|
@@ -95,6 +95,18 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static float? GetConvertDoubleToFloat(this IDataRecord dr, int i)
|
||||
{
|
||||
if (dr.IsDBNull(i))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var result = dr.GetDouble(i);
|
||||
return Convert.ToSingle(result);
|
||||
}
|
||||
|
||||
|
||||
public static Guid? GetConvertGuid(this IDataRecord dr, int i)
|
||||
{
|
||||
if (dr.IsDBNull(i))
|
||||
|
@@ -122,7 +122,7 @@ namespace SqlSugar
|
||||
{
|
||||
if (objectNames.HasValue())
|
||||
{
|
||||
this.TableInfoList = this.TableInfoList.Where(it => objectNames.Contains(it.Name)).ToList();
|
||||
this.TableInfoList = this.TableInfoList.Where(it => objectNames.Select(x=>x.ToLower()).Contains(it.Name.ToLower())).ToList();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
@@ -1,9 +1,11 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar
|
||||
@@ -16,6 +18,9 @@ namespace SqlSugar
|
||||
public DeleteBuilder DeleteBuilder { get; set; }
|
||||
public MappingTableList OldMappingTableList { get; set; }
|
||||
public bool IsAs { get; set; }
|
||||
public bool IsEnableDiffLogEvent { get; set; }
|
||||
public DiffLogModel diffModel { get; set; }
|
||||
public List<string> tempPrimaryKeys { get; set; }
|
||||
public EntityInfo EntityInfo
|
||||
{
|
||||
get
|
||||
@@ -30,8 +35,12 @@ namespace SqlSugar
|
||||
var paramters = DeleteBuilder.Parameters == null ? null : DeleteBuilder.Parameters.ToArray();
|
||||
RestoreMapping();
|
||||
AutoRemoveDataCache();
|
||||
return Db.ExecuteCommand(sql, paramters);
|
||||
Before(sql);
|
||||
var result = Db.ExecuteCommand(sql, paramters);
|
||||
After(sql);
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool ExecuteCommandHasChange()
|
||||
{
|
||||
return ExecuteCommand() > 0;
|
||||
@@ -71,6 +80,16 @@ namespace SqlSugar
|
||||
return this; ;
|
||||
}
|
||||
|
||||
public IDeleteable<T> EnableDiffLogEvent(object businessData = null)
|
||||
{
|
||||
|
||||
diffModel = new DiffLogModel();
|
||||
this.IsEnableDiffLogEvent = true;
|
||||
diffModel.BusinessData = businessData;
|
||||
diffModel.DiffType = DiffType.delete;
|
||||
return this;
|
||||
}
|
||||
|
||||
public IDeleteable<T> Where(List<T> deleteObjs)
|
||||
{
|
||||
if (deleteObjs == null || deleteObjs.Count() == 0)
|
||||
@@ -247,6 +266,34 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public IDeleteable<T> In<PkType>(Expression<Func<T, object>> inField, PkType primaryKeyValue)
|
||||
{
|
||||
var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
tempPrimaryKeys = new List<string>() { fieldName };
|
||||
var result = In(primaryKeyValue);;
|
||||
tempPrimaryKeys = null;
|
||||
return this;
|
||||
}
|
||||
public IDeleteable<T> In<PkType>(Expression<Func<T, object>> inField, PkType[] primaryKeyValues)
|
||||
{
|
||||
var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
tempPrimaryKeys = new List<string>() { fieldName };
|
||||
var result = In(primaryKeyValues);
|
||||
tempPrimaryKeys = null;
|
||||
return this;
|
||||
}
|
||||
public IDeleteable<T> In<PkType>(Expression<Func<T, object>> inField, List<PkType> primaryKeyValues)
|
||||
{
|
||||
var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
tempPrimaryKeys = new List<string>() { fieldName };
|
||||
var result = In(primaryKeyValues);
|
||||
tempPrimaryKeys = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public IDeleteable<T> With(string lockString)
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
|
||||
@@ -265,7 +312,11 @@ namespace SqlSugar
|
||||
|
||||
private List<string> GetPrimaryKeys()
|
||||
{
|
||||
if (this.Context.IsSystemTablesConfig)
|
||||
if (tempPrimaryKeys.HasValue())
|
||||
{
|
||||
return tempPrimaryKeys;
|
||||
}
|
||||
else if (this.Context.IsSystemTablesConfig)
|
||||
{
|
||||
return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityMaintenance.GetTableName(this.EntityInfo.EntityName));
|
||||
}
|
||||
@@ -297,7 +348,8 @@ namespace SqlSugar
|
||||
|
||||
private void TaskStart<Type>(Task<Type> result)
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.IsShardSameThread) {
|
||||
if (this.Context.CurrentConnectionConfig.IsShardSameThread)
|
||||
{
|
||||
Check.Exception(true, "IsShardSameThread=true can't be used async method");
|
||||
}
|
||||
result.Start();
|
||||
@@ -329,5 +381,59 @@ namespace SqlSugar
|
||||
asyncDeleteBuilder.TableWithString = this.DeleteBuilder.TableWithString;
|
||||
return asyncDeleteable;
|
||||
}
|
||||
|
||||
private void After(string sql)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = DeleteBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.AfterDate = null;
|
||||
diffModel.Time = this.Context.Ado.SqlExecutionTime;
|
||||
if (this.Context.Ado.DiffLogEvent != null)
|
||||
this.Context.Ado.DiffLogEvent(diffModel);
|
||||
}
|
||||
}
|
||||
|
||||
private void Before(string sql)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = DeleteBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.BeforeData = GetDiffTable(sql, parameters);
|
||||
diffModel.Sql = sql;
|
||||
diffModel.Parameters = parameters.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private List<DiffLogTableInfo> GetDiffTable(string sql, List<SugarParameter> parameters)
|
||||
{
|
||||
List<DiffLogTableInfo> result = new List<DiffLogTableInfo>();
|
||||
var whereSql = Regex.Replace(sql, ".* WHERE ", "", RegexOptions.Singleline);
|
||||
var dt = this.Context.Queryable<T>().Where(whereSql).AddParameters(parameters).ToDataTable();
|
||||
if (dt.Rows != null && dt.Rows.Count > 0)
|
||||
{
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
DiffLogTableInfo item = new DiffLogTableInfo();
|
||||
item.TableDescription = this.EntityInfo.TableDescription;
|
||||
item.TableName = this.EntityInfo.DbTableName;
|
||||
item.Columns = new List<DiffLogColumnInfo>();
|
||||
foreach (DataColumn col in dt.Columns)
|
||||
{
|
||||
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
||||
addItem.Value = row[col.ColumnName];
|
||||
addItem.ColumnName = col.ColumnName;
|
||||
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
||||
item.Columns.Add(addItem);
|
||||
}
|
||||
result.Add(item);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -182,6 +182,50 @@ namespace SqlSugar
|
||||
return _exp;
|
||||
}
|
||||
}
|
||||
public class Expressionable<T, T2, T3, T4,T5> where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5: class,new()
|
||||
{
|
||||
Expression<Func<T, T2, T3, T4,T5, bool>> _exp = null;
|
||||
|
||||
public Expressionable<T, T2, T3, T4,T5> And(Expression<Func<T, T2, T3, T4,T5, bool>> exp)
|
||||
{
|
||||
if (_exp == null)
|
||||
_exp = exp;
|
||||
else
|
||||
_exp = Expression.Lambda<Func<T, T2, T3, T4,T5, bool>>(Expression.AndAlso(_exp.Body, exp.Body), _exp.Parameters);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Expressionable<T, T2, T3, T4,T5> AndIF(bool isAnd, Expression<Func<T, T2, T3, T4,T5, bool>> exp)
|
||||
{
|
||||
if (isAnd)
|
||||
And(exp);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Expressionable<T, T2, T3, T4,T5> Or(Expression<Func<T, T2, T3, T4,T5, bool>> exp)
|
||||
{
|
||||
if (_exp == null)
|
||||
_exp = exp;
|
||||
else
|
||||
_exp = Expression.Lambda<Func<T, T2, T3, T4,T5, bool>>(Expression.OrElse(_exp.Body, exp.Body), _exp.Parameters);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Expressionable<T, T2, T3, T4,T5> OrIF(bool isOr, Expression<Func<T, T2, T3, T4,T5, bool>> exp)
|
||||
{
|
||||
if (isOr)
|
||||
Or(exp);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Expression<Func<T, T2, T3, T4,T5, bool>> ToExpression()
|
||||
{
|
||||
if (_exp == null)
|
||||
_exp = (it, t2, t3, t4,T5) => true;
|
||||
return _exp;
|
||||
}
|
||||
}
|
||||
|
||||
public class Expressionable
|
||||
{
|
||||
@@ -201,5 +245,9 @@ namespace SqlSugar
|
||||
{
|
||||
return new Expressionable<T, T2, T3,T4>();
|
||||
}
|
||||
public static Expressionable<T, T2, T3, T4,T5> Create<T, T2, T3, T4,T5>() where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : class, new() where T5:class,new()
|
||||
{
|
||||
return new Expressionable<T, T2, T3, T4,T5>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
@@ -26,6 +27,9 @@ namespace SqlSugar
|
||||
|
||||
public MappingTableList OldMappingTableList { get; set; }
|
||||
public bool IsAs { get; set; }
|
||||
public bool IsEnableDiffLogEvent { get; set; }
|
||||
public DiffLogModel diffModel { get; set; }
|
||||
|
||||
|
||||
#region Core
|
||||
public virtual int ExecuteCommand()
|
||||
@@ -35,7 +39,10 @@ namespace SqlSugar
|
||||
AutoRemoveDataCache();
|
||||
string sql = InsertBuilder.ToSqlString();
|
||||
RestoreMapping();
|
||||
return Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
|
||||
Before(sql);
|
||||
var result= Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
|
||||
After(sql,null);
|
||||
return result;
|
||||
}
|
||||
|
||||
public virtual KeyValuePair<string, List<SugarParameter>> ToSql()
|
||||
@@ -54,7 +61,10 @@ namespace SqlSugar
|
||||
AutoRemoveDataCache();
|
||||
string sql = InsertBuilder.ToSqlString();
|
||||
RestoreMapping();
|
||||
return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
|
||||
Before(sql);
|
||||
var result= Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
|
||||
After(sql,result);
|
||||
return result;
|
||||
}
|
||||
public virtual long ExecuteReturnBigIdentity()
|
||||
{
|
||||
@@ -63,7 +73,10 @@ namespace SqlSugar
|
||||
AutoRemoveDataCache();
|
||||
string sql = InsertBuilder.ToSqlString();
|
||||
RestoreMapping();
|
||||
return Convert.ToInt64( Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()));
|
||||
Before(sql);
|
||||
var result= Convert.ToInt64( Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()));
|
||||
After(sql,result);
|
||||
return result;
|
||||
}
|
||||
public virtual T ExecuteReturnEntity()
|
||||
{
|
||||
@@ -199,6 +212,15 @@ namespace SqlSugar
|
||||
CacheSchemeMain.RemoveCache(cacheService, this.Context.EntityMaintenance.GetTableName<T>());
|
||||
return this;
|
||||
}
|
||||
public IInsertable<T> EnableDiffLogEvent(object businessData = null)
|
||||
{
|
||||
Check.Exception(this.InsertObjs.HasValue() && this.InsertObjs.Count() > 1, "DiffLog does not support batch operations");
|
||||
diffModel = new DiffLogModel();
|
||||
this.IsEnableDiffLogEvent = true;
|
||||
diffModel.BusinessData = businessData;
|
||||
diffModel.DiffType = DiffType.insert;
|
||||
return this;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Protected Methods
|
||||
@@ -395,6 +417,76 @@ namespace SqlSugar
|
||||
asyncInsertableBuilder.TableWithString = this.InsertBuilder.TableWithString;
|
||||
return asyncInsertable;
|
||||
}
|
||||
|
||||
private void After(string sql,long? result)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = InsertBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.AfterDate = GetDiffTable(sql,result);
|
||||
diffModel.Time = this.Context.Ado.SqlExecutionTime;
|
||||
if (this.Context.Ado.DiffLogEvent != null)
|
||||
this.Context.Ado.DiffLogEvent(diffModel);
|
||||
}
|
||||
}
|
||||
private void Before(string sql)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = InsertBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.BeforeData = null;
|
||||
diffModel.Sql = sql;
|
||||
diffModel.Parameters = parameters.ToArray();
|
||||
}
|
||||
}
|
||||
private List<DiffLogTableInfo> GetDiffTable(string sql,long? identity)
|
||||
{
|
||||
List<SugarParameter> parameters = new List<SugarParameter>();
|
||||
List<DiffLogTableInfo> result = new List<DiffLogTableInfo>();
|
||||
var whereSql = string.Empty;
|
||||
List<IConditionalModel> cons = new List<IConditionalModel>();
|
||||
if (identity != null&&identity>0)
|
||||
{
|
||||
var fieldName = GetIdentityKeys().Last();
|
||||
cons.Add(new ConditionalModel() { ConditionalType=ConditionalType.Equal, FieldName= fieldName, FieldValue=identity.ToString() });
|
||||
}
|
||||
else {
|
||||
foreach(var item in this.EntityInfo.Columns.Where(it => it.IsIgnore == false&&GetPrimaryKeys().Any(pk=>pk.Equals(it.DbColumnName,StringComparison.CurrentCultureIgnoreCase)))) {
|
||||
var fielddName = item.DbColumnName;
|
||||
var fieldValue = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyName == item.PropertyName).PropertyInfo.GetValue(this.InsertObjs.Last(), null).ObjToString();
|
||||
cons.Add(new ConditionalModel() { ConditionalType = ConditionalType.Equal, FieldName = fielddName, FieldValue =fieldValue });
|
||||
}
|
||||
}
|
||||
Check.Exception(cons.IsNullOrEmpty(), "Insertable.EnableDiffLogEvent need primary key");
|
||||
var sqlable = this.Context.Utilities.ConditionalModelToSql(cons);
|
||||
whereSql = sqlable.Key;
|
||||
parameters.AddRange(sqlable.Value);
|
||||
var dt = this.Context.Queryable<T>().Where(whereSql).AddParameters(parameters).ToDataTable();
|
||||
if (dt.Rows != null && dt.Rows.Count > 0)
|
||||
{
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
DiffLogTableInfo item = new DiffLogTableInfo();
|
||||
item.TableDescription = this.EntityInfo.TableDescription;
|
||||
item.TableName = this.EntityInfo.DbTableName;
|
||||
item.Columns = new List<DiffLogColumnInfo>();
|
||||
foreach (DataColumn col in dt.Columns)
|
||||
{
|
||||
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
||||
addItem.Value = row[col.ColumnName];
|
||||
addItem.ColumnName = col.ColumnName;
|
||||
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
||||
item.Columns.Add(addItem);
|
||||
}
|
||||
result.Add(item);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@@ -254,6 +254,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -483,6 +484,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual ISugarQueryable<T> MergeTable()
|
||||
{
|
||||
Check.Exception(this.MapperAction != null, "'Mapper’ needs to be written after ‘MergeTable’ ");
|
||||
Check.Exception(this.QueryBuilder.SelectValue.IsNullOrEmpty(), "MergeTable need to use Queryable.Select Method .");
|
||||
Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0 || this.QueryBuilder.OrderByValue.HasValue(), "MergeTable Queryable cannot Take Skip OrderBy PageToList ");
|
||||
ToSqlBefore();
|
||||
@@ -984,6 +986,7 @@ namespace SqlSugar
|
||||
}
|
||||
protected ISugarQueryable<TResult> _Select<TResult>(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression,"Select");
|
||||
this.Context.InitMppingInfo<TResult>();
|
||||
var result = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig);
|
||||
result.Context = this.Context;
|
||||
@@ -994,12 +997,14 @@ namespace SqlSugar
|
||||
}
|
||||
protected void _Where(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Where");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var result = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple);
|
||||
QueryBuilder.WhereInfos.Add(SqlBuilder.AppendWhereOrAnd(QueryBuilder.WhereInfos.IsNullOrEmpty(), result.GetResultString()));
|
||||
}
|
||||
protected ISugarQueryable<T> _OrderBy(Expression expression, OrderByType type = OrderByType.Asc)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "OrderBy");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
OrderBy(lamResult.GetResultString() + UtilConstants.Space + type.ToString().ToUpper());
|
||||
@@ -1007,6 +1012,7 @@ namespace SqlSugar
|
||||
}
|
||||
protected ISugarQueryable<T> _GroupBy(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "GroupBy");
|
||||
LambdaExpression lambda = expression as LambdaExpression;
|
||||
expression = lambda.Body;
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
@@ -1027,6 +1033,7 @@ namespace SqlSugar
|
||||
}
|
||||
protected TResult _Min<TResult>(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Main");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var result = Min<TResult>(lamResult.GetResultString());
|
||||
@@ -1035,12 +1042,14 @@ namespace SqlSugar
|
||||
}
|
||||
protected TResult _Avg<TResult>(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Avg");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
return Avg<TResult>(lamResult.GetResultString());
|
||||
}
|
||||
protected TResult _Max<TResult>(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Max");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var reslut = Max<TResult>(lamResult.GetResultString());
|
||||
@@ -1049,6 +1058,7 @@ namespace SqlSugar
|
||||
}
|
||||
protected TResult _Sum<TResult>(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Sum");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var reslut = Sum<TResult>(lamResult.GetResultString());
|
||||
@@ -1083,6 +1093,7 @@ namespace SqlSugar
|
||||
}
|
||||
public ISugarQueryable<T> _PartitionBy(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "PartitionBy");
|
||||
LambdaExpression lambda = expression as LambdaExpression;
|
||||
expression = lambda.Body;
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
@@ -1103,6 +1114,7 @@ namespace SqlSugar
|
||||
}
|
||||
protected ISugarQueryable<T> _Having(Expression expression)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "Having");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple);
|
||||
Having(lamResult.GetResultString());
|
||||
@@ -1193,7 +1205,7 @@ namespace SqlSugar
|
||||
}
|
||||
else if (entityType.IsAnonymousType() || isComplexModel)
|
||||
{
|
||||
result = this.Context.Utilities.DataReaderToDynamicList<TResult>(dataReader);
|
||||
result = this.Context.Utilities.DataReaderToList<TResult>(dataReader);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1203,8 +1215,9 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void _InQueryable(Expression<Func<T, object>> expression, KeyValuePair<string, List<SugarParameter>> sqlObj)
|
||||
protected void _InQueryable(Expression expression, KeyValuePair<string, List<SugarParameter>> sqlObj)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
string sql = sqlObj.Key;
|
||||
if (sqlObj.Value.HasValue())
|
||||
{
|
||||
@@ -1449,6 +1462,7 @@ namespace SqlSugar
|
||||
#region In
|
||||
public new ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -1457,6 +1471,7 @@ namespace SqlSugar
|
||||
}
|
||||
public new ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -1469,6 +1484,31 @@ namespace SqlSugar
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
@@ -1732,6 +1772,7 @@ namespace SqlSugar
|
||||
#region In
|
||||
public new ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -1740,6 +1781,7 @@ namespace SqlSugar
|
||||
}
|
||||
public new ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -1752,6 +1794,56 @@ namespace SqlSugar
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
@@ -2047,6 +2139,7 @@ namespace SqlSugar
|
||||
#region In
|
||||
public new ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -2055,6 +2148,7 @@ namespace SqlSugar
|
||||
}
|
||||
public new ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
@@ -2067,8 +2161,84 @@ namespace SqlSugar
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, List<FieldType> inValues)
|
||||
{
|
||||
QueryBuilder.CheckExpression(expression, "In");
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
In(fieldName, inValues);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, ISugarQueryable<FieldType> childQueryExpression)
|
||||
{
|
||||
var sqlObj = childQueryExpression.ToSql();
|
||||
_InQueryable(expression, sqlObj);
|
||||
return this;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region Other
|
||||
public new ISugarQueryable<T, T2,T3,T4> Clone()
|
||||
{
|
||||
|
@@ -508,5 +508,24 @@ namespace SqlSugar
|
||||
var result = this.Context.EntityMaintenance.GetTableName(entityName);
|
||||
return this.Builder.GetTranslationTableName(result);
|
||||
}
|
||||
|
||||
public void CheckExpression(Expression expression, string methodName)
|
||||
{
|
||||
if (IsSingle() == false&& this.JoinExpression!=null)
|
||||
{
|
||||
var jsoinParameters = (this.JoinExpression as LambdaExpression).Parameters;
|
||||
var currentParametres = (expression as LambdaExpression).Parameters;
|
||||
if (currentParametres != null && currentParametres.Count > 0)
|
||||
{
|
||||
foreach (var item in currentParametres)
|
||||
{
|
||||
var index = currentParametres.IndexOf(item);
|
||||
var name = item.Name;
|
||||
var joinName = jsoinParameters[index].Name;
|
||||
Check.Exception(name.ToLower() != joinName.ToLower(), ErrorMessage.ExpressionCheck, joinName, methodName, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -31,7 +31,7 @@ namespace SqlSugar
|
||||
public virtual string GetTranslationTableName(string name)
|
||||
{
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
if (name.IsContainsIn("(", ")", SqlTranslationLeft))
|
||||
if (name.IsContainsIn("(", ")", SqlTranslationLeft)&&name!= "Dictionary`2")
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
@@ -26,6 +27,9 @@ namespace SqlSugar
|
||||
private bool IsVersionValidation { get; set; }
|
||||
public MappingTableList OldMappingTableList { get; set; }
|
||||
public bool IsAs { get; set; }
|
||||
public bool IsEnableDiffLogEvent { get; set; }
|
||||
public DiffLogModel diffModel { get; set; }
|
||||
|
||||
public virtual int ExecuteCommand()
|
||||
{
|
||||
PreToSql();
|
||||
@@ -34,7 +38,10 @@ namespace SqlSugar
|
||||
string sql = UpdateBuilder.ToSqlString();
|
||||
ValidateVersion();
|
||||
RestoreMapping();
|
||||
return this.Ado.ExecuteCommand(sql, UpdateBuilder.Parameters == null ? null : UpdateBuilder.Parameters.ToArray());
|
||||
Before(sql);
|
||||
var result = this.Ado.ExecuteCommand(sql, UpdateBuilder.Parameters == null ? null : UpdateBuilder.Parameters.ToArray());
|
||||
After(sql);
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool ExecuteCommandHasChange()
|
||||
@@ -86,6 +93,16 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public IUpdateable<T> EnableDiffLogEvent(object businessData = null)
|
||||
{
|
||||
Check.Exception(this.UpdateObjs.HasValue() && this.UpdateObjs.Count() > 1, "DiffLog does not support batch operations");
|
||||
diffModel = new DiffLogModel();
|
||||
this.IsEnableDiffLogEvent = true;
|
||||
diffModel.BusinessData = businessData;
|
||||
diffModel.DiffType = DiffType.update;
|
||||
return this;
|
||||
}
|
||||
|
||||
public IUpdateable<T> IgnoreColumns(bool ignoreAllNullColumns, bool isOffIdentity = false)
|
||||
{
|
||||
UpdateBuilder.IsOffIdentity = isOffIdentity;
|
||||
@@ -536,5 +553,58 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
private void After(string sql)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = UpdateBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.AfterDate = GetDiffTable(sql, parameters);
|
||||
diffModel.Time = this.Context.Ado.SqlExecutionTime;
|
||||
if (this.Context.Ado.DiffLogEvent != null)
|
||||
this.Context.Ado.DiffLogEvent(diffModel);
|
||||
}
|
||||
}
|
||||
|
||||
private void Before(string sql)
|
||||
{
|
||||
if (this.IsEnableDiffLogEvent)
|
||||
{
|
||||
var parameters = UpdateBuilder.Parameters;
|
||||
if (parameters == null)
|
||||
parameters = new List<SugarParameter>();
|
||||
diffModel.BeforeData = GetDiffTable(sql, parameters);
|
||||
diffModel.Sql = sql;
|
||||
diffModel.Parameters = parameters.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private List<DiffLogTableInfo> GetDiffTable(string sql, List<SugarParameter> parameters)
|
||||
{
|
||||
List<DiffLogTableInfo> result = new List<DiffLogTableInfo>();
|
||||
var whereSql = Regex.Replace(sql, ".* WHERE ", "", RegexOptions.Singleline);
|
||||
var dt = this.Context.Queryable<T>().Where(whereSql).AddParameters(parameters).ToDataTable();
|
||||
if (dt.Rows != null && dt.Rows.Count > 0)
|
||||
{
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
DiffLogTableInfo item = new DiffLogTableInfo();
|
||||
item.TableDescription = this.EntityInfo.TableDescription;
|
||||
item.TableName = this.EntityInfo.DbTableName;
|
||||
item.Columns = new List<DiffLogColumnInfo>();
|
||||
foreach (DataColumn col in dt.Columns)
|
||||
{
|
||||
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
||||
addItem.Value = row[col.ColumnName];
|
||||
addItem.ColumnName = col.ColumnName;
|
||||
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
||||
item.Columns.Add(addItem);
|
||||
}
|
||||
result.Add(item);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class DiffLogModel
|
||||
{
|
||||
public List<DiffLogTableInfo> AfterDate { get; set; }
|
||||
public List<DiffLogTableInfo> BeforeData { get; set; }
|
||||
public SugarParameter[] Parameters { get; set; }
|
||||
public string Sql { get; set; }
|
||||
public TimeSpan? Time { get; set; }
|
||||
public object BusinessData { get; set; }
|
||||
public DiffType DiffType { get; set; }
|
||||
}
|
||||
public class DiffLogTableInfo
|
||||
{
|
||||
public string TableName { get; set; }
|
||||
public string TableDescription { get; set; }
|
||||
public List<DiffLogColumnInfo> Columns { get; set; }
|
||||
}
|
||||
public class DiffLogColumnInfo {
|
||||
|
||||
public string ColumnName { get; set; }
|
||||
public string ColumnDescription { get; set; }
|
||||
public object Value { get; set; }
|
||||
}
|
||||
}
|
14
Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DiffType.cs
Normal file
14
Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DiffType.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public enum DiffType
|
||||
{
|
||||
insert=0,
|
||||
update=1,
|
||||
delete=2
|
||||
}
|
||||
}
|
@@ -37,5 +37,12 @@ namespace SqlSugar
|
||||
return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:{0}.");
|
||||
}
|
||||
}
|
||||
public static string ExpressionCheck
|
||||
{
|
||||
get
|
||||
{
|
||||
return ErrorMessage.GetThrowMessage("Join {0} needs to be the same as {1} {2}", "多表查询存在别名不一致,请把{1}中的{2}改成{0}就可以了,特殊需求可以使用.Select((x,y)=>new{{ id=x.id,name=y.name}}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@ namespace SqlSugar
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
MemberAssignment memberAssignment = (MemberAssignment)binding;
|
||||
var type = memberAssignment.Member.ReflectedType;
|
||||
var type =expression.Type;
|
||||
var memberName = this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name);
|
||||
var item = memberAssignment.Expression;
|
||||
if ((item is MemberExpression) && ((MemberExpression)item).Expression == null)
|
||||
|
@@ -44,8 +44,13 @@ namespace SqlSugar
|
||||
{
|
||||
var exp = expression as MethodCallExpression;
|
||||
var argExp = exp.Arguments[0];
|
||||
var parametres = (argExp as LambdaExpression).Parameters;
|
||||
if ((argExp as LambdaExpression).Body is UnaryExpression)
|
||||
{
|
||||
argExp = ((argExp as LambdaExpression).Body as UnaryExpression).Operand;
|
||||
}
|
||||
var result = "MAX(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple) + ")";
|
||||
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
return result;
|
||||
}
|
||||
|
@@ -44,8 +44,13 @@ namespace SqlSugar
|
||||
{
|
||||
var exp = expression as MethodCallExpression;
|
||||
var argExp = exp.Arguments[0];
|
||||
var parametres = (argExp as LambdaExpression).Parameters;
|
||||
if ((argExp as LambdaExpression).Body is UnaryExpression)
|
||||
{
|
||||
argExp = ((argExp as LambdaExpression).Body as UnaryExpression).Operand;
|
||||
}
|
||||
var result = "MIN(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple) + ")";
|
||||
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
return result;
|
||||
}
|
||||
|
@@ -44,8 +44,13 @@ namespace SqlSugar
|
||||
{
|
||||
var exp = expression as MethodCallExpression;
|
||||
var argExp = exp.Arguments[0];
|
||||
var parametres = (argExp as LambdaExpression).Parameters;
|
||||
if ((argExp as LambdaExpression).Body is UnaryExpression)
|
||||
{
|
||||
argExp =((argExp as LambdaExpression).Body as UnaryExpression).Operand;
|
||||
}
|
||||
var result = "SUM(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple)+")";
|
||||
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
return result;
|
||||
}
|
||||
|
@@ -113,12 +113,12 @@ namespace SqlSugar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DataReaderToDynamicList
|
||||
/// DataReaderToList
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="reader"></param>
|
||||
/// <returns></returns>
|
||||
public List<T> DataReaderToDynamicList<T>(IDataReader reader)
|
||||
public List<T> DataReaderToList<T>(IDataReader reader)
|
||||
{
|
||||
using (reader)
|
||||
{
|
||||
@@ -143,7 +143,7 @@ namespace SqlSugar
|
||||
{
|
||||
if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase)))
|
||||
{
|
||||
var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues[name.ToUpper()];
|
||||
var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it=>it.Key.Equals(name,StringComparison.CurrentCultureIgnoreCase)).Value;
|
||||
if (addValue == DBNull.Value)
|
||||
{
|
||||
if (item.PropertyType.IsIn(UtilConstants.IntType, UtilConstants.DecType, UtilConstants.DobType, UtilConstants.ByteType))
|
||||
@@ -305,6 +305,24 @@ namespace SqlSugar
|
||||
return this.DeserializeObject<dynamic>(this.SerializeObject(deserializeObject));
|
||||
|
||||
}
|
||||
public List<T> DataTableToList<T>(DataTable table)
|
||||
{
|
||||
List<Dictionary<string, object>> deserializeObject = new List<Dictionary<string, object>>();
|
||||
Dictionary<string, object> childRow;
|
||||
foreach (DataRow row in table.Rows)
|
||||
{
|
||||
childRow = new Dictionary<string, object>();
|
||||
foreach (DataColumn col in table.Columns)
|
||||
{
|
||||
var addItem = row[col];
|
||||
if (addItem == DBNull.Value)
|
||||
addItem = null;
|
||||
childRow.Add(col.ColumnName, addItem);
|
||||
}
|
||||
deserializeObject.Add(childRow);
|
||||
}
|
||||
return this.DeserializeObject<List<T>>(this.SerializeObject(deserializeObject));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Cache
|
||||
|
@@ -27,8 +27,10 @@ namespace SqlSugar
|
||||
Action<string, SugarParameter []> LogEventCompleted { get; set; }
|
||||
Func<string, SugarParameter[], KeyValuePair<string, SugarParameter[]>> ProcessingEventStartingSQL { get; set; }
|
||||
Action<Exception> ErrorEvent { get; set; }
|
||||
Action<DiffLogModel> DiffLogEvent { get; set; }
|
||||
bool IsClearParameters { get; set; }
|
||||
int CommandTimeOut { get; set; }
|
||||
TimeSpan SqlExecutionTime { get; }
|
||||
IDbBind DbBind { get; }
|
||||
void SetCommandToAdapter(IDataAdapter adapter, IDbCommand command);
|
||||
IDataAdapter GetAdapter();
|
||||
|
@@ -13,12 +13,13 @@ namespace SqlSugar
|
||||
SqlSugarClient Context { get; set; }
|
||||
ExpandoObject DataReaderToExpandoObject(IDataReader reader);
|
||||
List<ExpandoObject> DataReaderToExpandoObjectList(IDataReader reader);
|
||||
List<T> DataReaderToDynamicList<T>(IDataReader reader);
|
||||
List<T> DataReaderToList<T>(IDataReader reader);
|
||||
string SerializeObject(object value);
|
||||
T DeserializeObject<T>(string value);
|
||||
T TranslateCopy<T>(T sourceObject);
|
||||
SqlSugarClient CopyContext(bool isCopyEvents = false);
|
||||
dynamic DataTableToDynamic(DataTable table);
|
||||
List<T> DataTableToList<T>(DataTable table);
|
||||
ICacheService GetReflectionInoCacheInstance();
|
||||
void RemoveCacheAll();
|
||||
void RemoveCacheAll<T>();
|
||||
|
@@ -22,10 +22,14 @@ namespace SqlSugar
|
||||
IDeleteable<T> In<PkType>(PkType primaryKeyValue);
|
||||
IDeleteable<T> In<PkType>(PkType[] primaryKeyValues);
|
||||
IDeleteable<T> In<PkType>(List<PkType> primaryKeyValues);
|
||||
IDeleteable<T> In<PkType>(Expression<Func<T,object>> inField,PkType primaryKeyValue);
|
||||
IDeleteable<T> In<PkType>(Expression<Func<T, object>> inField,PkType[] primaryKeyValues);
|
||||
IDeleteable<T> In<PkType>(Expression<Func<T, object>> inField,List<PkType> primaryKeyValues);
|
||||
IDeleteable<T> Where(string whereString,object parameters=null);
|
||||
IDeleteable<T> Where(string whereString, SugarParameter parameter);
|
||||
IDeleteable<T> Where(string whereString, SugarParameter[] parameters);
|
||||
IDeleteable<T> Where(string whereString, List<SugarParameter> parameters);
|
||||
IDeleteable<T> EnableDiffLogEvent(object businessData = null);
|
||||
IDeleteable<T> RemoveDataCache();
|
||||
KeyValuePair<string, List<SugarParameter>> ToSql();
|
||||
}
|
||||
|
@@ -176,6 +176,10 @@ namespace SqlSugar
|
||||
new ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues);
|
||||
new ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues);
|
||||
new ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
@@ -244,6 +248,14 @@ namespace SqlSugar
|
||||
new ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues);
|
||||
new ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues);
|
||||
new ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2, T3> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
@@ -319,6 +331,18 @@ namespace SqlSugar
|
||||
new ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues);
|
||||
new ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues);
|
||||
new ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T,T2, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2,T3, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, params FieldType[] inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, List<FieldType> inValues);
|
||||
ISugarQueryable<T, T2, T3, T4> In<FieldType>(Expression<Func<T, T2, T3,T4, object>> expression, ISugarQueryable<FieldType> childQueryExpression);
|
||||
#endregion
|
||||
|
||||
#region Other
|
||||
|
@@ -46,6 +46,7 @@ namespace SqlSugar
|
||||
IUpdateable<T> IgnoreColumns(Expression<Func<T, object>> columns);
|
||||
IUpdateable<T> IgnoreColumns(Func<string, bool> ignoreColumMethod);
|
||||
IUpdateable<T> IsEnableUpdateVersionValidation();
|
||||
IUpdateable<T> EnableDiffLogEvent(object businessData = null);
|
||||
IUpdateable<T> ReSetValue(Expression<Func<T, bool>> setValueExpression);
|
||||
IUpdateable<T> RemoveDataCache();
|
||||
KeyValuePair<string,List<SugarParameter>> ToSql();
|
||||
|
@@ -27,6 +27,7 @@ namespace SqlSugar
|
||||
IInsertable<T> IgnoreColumns(Expression<Func<T, object>> columns);
|
||||
IInsertable<T> IgnoreColumns(Func<string,bool> ignoreColumMethod);
|
||||
IInsertable<T> Where(bool isInsertNull, bool isOffIdentity = false);
|
||||
IInsertable<T> EnableDiffLogEvent(object businessData = null);
|
||||
IInsertable<T> RemoveDataCache();
|
||||
KeyValuePair<string, List<SugarParameter>> ToSql();
|
||||
}
|
||||
|
@@ -104,7 +104,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "SELECT * INTO {1} FROM {2} limit 0,{0}";
|
||||
return "Create table {1} (Select * from {2} LIMIT 0,{0})";
|
||||
}
|
||||
}
|
||||
protected override string DropTableSql
|
||||
@@ -176,6 +176,7 @@ namespace SqlSugar
|
||||
return "AUTO_INCREMENT";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string AddColumnRemarkSql
|
||||
{
|
||||
get
|
||||
@@ -204,7 +205,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} COMMENT='{1}';";
|
||||
return "ALTER TABLE {0} COMMENT='{1}';";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,22 +227,6 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public override bool AddRemark(EntityInfo entity)
|
||||
{
|
||||
var db = this.Context;
|
||||
db.DbMaintenance.AddTableRemark(entity.DbTableName, entity.TableDescription);
|
||||
List<EntityColumnInfo> columns = entity.Columns.Where(it => it.IsIgnore == false).ToList();
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.ColumnDescription != null)
|
||||
{
|
||||
var mySqlCodeFirst = this.Context.CodeFirst as MySqlCodeFirst;
|
||||
string sql = GetUpdateColumnSql(entity.DbTableName, mySqlCodeFirst.GetEntityColumnToDbColumn(entity, entity.DbTableName, item)) + " " + (item.IsIdentity ? "AUTO_INCREMENT" : "") + " " + " COMMENT '" + item.ColumnDescription + "'";
|
||||
db.Ado.ExecuteCommand(sql);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public override bool CreateTable(string tableName, List<DbColumnInfo> columns, bool isCreatePrimaryKey = true)
|
||||
{
|
||||
if (columns.HasValue())
|
||||
@@ -264,6 +249,22 @@ namespace SqlSugar
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public override bool AddRemark(EntityInfo entity)
|
||||
{
|
||||
var db = this.Context;
|
||||
db.DbMaintenance.AddTableRemark(entity.DbTableName, entity.TableDescription);
|
||||
List<EntityColumnInfo> columns = entity.Columns.Where(it => it.IsIgnore == false).ToList();
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.ColumnDescription != null)
|
||||
{
|
||||
var mySqlCodeFirst = this.Context.CodeFirst as MySqlCodeFirst;
|
||||
string sql = GetUpdateColumnSql(entity.DbTableName, mySqlCodeFirst.GetEntityColumnToDbColumn(entity, entity.DbTableName, item))+" "+(item.IsIdentity? "AUTO_INCREMENT" : "")+" " + " COMMENT '" + item.ColumnDescription + "'";
|
||||
db.Ado.ExecuteCommand(sql);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
protected override string GetCreateTableSql(string tableName, List<DbColumnInfo> columns)
|
||||
{
|
||||
List<string> columnArray = new List<string>();
|
||||
@@ -318,6 +319,7 @@ namespace SqlSugar
|
||||
Check.ThrowNotSupportedException("MySql BackupDataBase NotSupported");
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@@ -7,9 +7,39 @@ namespace SqlSugar
|
||||
{
|
||||
public class OracleCodeFirst : CodeFirstProvider
|
||||
{
|
||||
public OracleCodeFirst()
|
||||
public OracleCodeFirst() {
|
||||
if (DefultLength == 0)
|
||||
DefultLength = 40;
|
||||
}
|
||||
protected override int DefultLength { get; set; }
|
||||
|
||||
protected override void GetDbType(EntityColumnInfo item, Type propertyType, DbColumnInfo result)
|
||||
{
|
||||
throw new Exception("Oracle该功能还未测试");
|
||||
if (!string.IsNullOrEmpty(item.DataType))
|
||||
{
|
||||
result.DataType = item.DataType;
|
||||
}
|
||||
else if (propertyType.IsEnum())
|
||||
{
|
||||
result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length > 9 ? UtilConstants.LongType.Name : UtilConstants.IntType.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (propertyType.Name.Equals("Guid", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
result.DataType = this.Context.Ado.DbBind.GetDbTypeName(UtilConstants.StringType.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.DataType = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void KeyAction(EntityColumnInfo item, DbColumnInfo dbColumn, out bool pkDiff, out bool idEntityDiff)
|
||||
{
|
||||
pkDiff = item.IsPrimarykey != dbColumn.IsPrimarykey;
|
||||
idEntityDiff = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -55,14 +55,14 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} ADD {1} {2}{3} {4} {5} {6}";
|
||||
return "ALTER TABLE {0} ADD ({1} {2}{3} {4} {5} {6})";
|
||||
}
|
||||
}
|
||||
protected override string AlterColumnToTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} ALTER COLUMN {1} {2}{3} {4} {5} {6}";
|
||||
return "ALTER TABLE {0} modify ({1} {2}{3} {4} {5} {6}) ";
|
||||
}
|
||||
}
|
||||
protected override string BackupDataBaseSql
|
||||
@@ -97,7 +97,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "SELECT TOP {0} * INTO {1} FROM {2}";
|
||||
return "create table {1} as select * from {2} where ROWNUM<={0}";
|
||||
}
|
||||
}
|
||||
protected override string DropTableSql
|
||||
@@ -125,7 +125,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "exec sp_rename '{0}.{1}','{2}','column';";
|
||||
return "ALTER TABLE {0} rename column {1} to {2}";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@@ -145,14 +145,14 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "NULL";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
protected override string CreateTableNotNull
|
||||
{
|
||||
get
|
||||
{
|
||||
return "NOT NULL";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
protected override string CreateTablePirmaryKey
|
||||
@@ -166,14 +166,15 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "IDENTITY(1,1)";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string AddColumnRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "comment on column {1}.{0} is '{2}';";
|
||||
return "comment on column {1}.{0} is '{2}'";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +182,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "comment on column {1}.{0} is '';";
|
||||
return "comment on column {1}.{0} is ''";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,7 +198,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "comment on table {0} is '{1}';";
|
||||
return "comment on table {0} is '{1}'";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +206,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return "comment on table {0} is '';";
|
||||
return "comment on table {0} is ''";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +220,43 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public override bool AddRemark(EntityInfo entity)
|
||||
{
|
||||
var db = this.Context;
|
||||
var columns = entity.Columns.Where(it => it.IsIgnore == false).ToList();
|
||||
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.ColumnDescription != null)
|
||||
{
|
||||
//column remak
|
||||
if (db.DbMaintenance.IsAnyColumnRemark(item.DbColumnName.ToUpper(), item.DbTableName.ToUpper()))
|
||||
{
|
||||
db.DbMaintenance.DeleteColumnRemark(item.DbColumnName.ToUpper(), item.DbTableName.ToUpper());
|
||||
db.DbMaintenance.AddColumnRemark(item.DbColumnName.ToUpper(), item.DbTableName.ToUpper(), item.ColumnDescription);
|
||||
}
|
||||
else
|
||||
{
|
||||
db.DbMaintenance.AddColumnRemark(item.DbColumnName.ToUpper(), item.DbTableName.ToUpper(), item.ColumnDescription);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//table remak
|
||||
if (entity.TableDescription != null)
|
||||
{
|
||||
if (db.DbMaintenance.IsAnyTableRemark(entity.DbTableName))
|
||||
{
|
||||
db.DbMaintenance.DeleteTableRemark(entity.DbTableName);
|
||||
db.DbMaintenance.AddTableRemark(entity.DbTableName, entity.TableDescription);
|
||||
}
|
||||
else
|
||||
{
|
||||
db.DbMaintenance.AddTableRemark(entity.DbTableName, entity.TableDescription);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public override List<DbColumnInfo> GetColumnInfosByTableName(string tableName,bool isCache=true)
|
||||
{
|
||||
string cacheKey = "DbMaintenanceProvider.GetColumnInfosByTableName." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
|
||||
@@ -318,7 +356,27 @@ namespace SqlSugar
|
||||
|
||||
public override bool CreateTable(string tableName, List<DbColumnInfo> columns, bool isCreatePrimaryKey = true)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
if (columns.HasValue())
|
||||
{
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.DbColumnName.Equals("GUID", StringComparison.CurrentCultureIgnoreCase) && item.Length == 0)
|
||||
{
|
||||
item.Length = 50;
|
||||
}
|
||||
}
|
||||
}
|
||||
string sql = GetCreateTableSql(tableName, columns);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
if (isCreatePrimaryKey)
|
||||
{
|
||||
var pkColumns = columns.Where(it => it.IsPrimarykey).ToList();
|
||||
foreach (var item in pkColumns)
|
||||
{
|
||||
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
Binary file not shown.
Reference in New Issue
Block a user