Update Core

This commit is contained in:
sunkaixuan 2017-12-22 16:02:29 +08:00
parent a020daf9f8
commit 75766b3735
14 changed files with 640 additions and 444 deletions

View File

@ -352,7 +352,7 @@ namespace SqlSugar
ExecuteBefore(sql, parameters); ExecuteBefore(sql, parameters);
IDbCommand sqlCommand = GetCommand(sql, parameters); IDbCommand sqlCommand = GetCommand(sql, parameters);
object scalar = sqlCommand.ExecuteScalar(); object scalar = sqlCommand.ExecuteScalar();
scalar = (scalar == null ? 0 : scalar); //scalar = (scalar == null ? 0 : scalar);
if (this.IsClearParameters) if (this.IsClearParameters)
sqlCommand.Parameters.Clear(); sqlCommand.Parameters.Clear();
ExecuteAfter(sql, parameters); ExecuteAfter(sql, parameters);
@ -730,7 +730,7 @@ namespace SqlSugar
private void SetConnectionEnd(string sql) private void SetConnectionEnd(string sql)
{ {
if (this.IsMasterSlaveSeparation && IsRead(sql)) if (this.IsMasterSlaveSeparation && IsRead(sql)&&this.Transaction==null)
{ {
this.Connection = this.MasterConnection; this.Connection = this.MasterConnection;
this.Context.CurrentConnectionConfig.ConnectionString = this.MasterConnection.ConnectionString; this.Context.CurrentConnectionConfig.ConnectionString = this.MasterConnection.ConnectionString;

View File

@ -140,7 +140,7 @@ namespace SqlSugar
public virtual string GetPropertyTypeName(string dbTypeName) public virtual string GetPropertyTypeName(string dbTypeName)
{ {
dbTypeName = dbTypeName.ToLower(); dbTypeName = dbTypeName.ToLower();
var propertyTypes = MappingTypes.Where(it => it.Key.Equals(dbTypeName,StringComparison.CurrentCultureIgnoreCase)); var propertyTypes = MappingTypes.Where(it => it.Key.Equals(dbTypeName, StringComparison.CurrentCultureIgnoreCase));
if (dbTypeName == "int32") if (dbTypeName == "int32")
{ {
return "int"; return "int";
@ -161,6 +161,10 @@ namespace SqlSugar
{ {
return "string"; return "string";
} }
else if (dbTypeName.IsContainsIn("boolean", "bool"))
{
return "bool";
}
else if (propertyTypes == null || propertyTypes.Count() == 0) else if (propertyTypes == null || propertyTypes.Count() == 0)
{ {
Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName)); Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName));

View File

@ -28,6 +28,7 @@ namespace SqlSugar
string sql = DeleteBuilder.ToSqlString(); string sql = DeleteBuilder.ToSqlString();
var paramters = DeleteBuilder.Parameters == null ? null : DeleteBuilder.Parameters.ToArray(); var paramters = DeleteBuilder.Parameters == null ? null : DeleteBuilder.Parameters.ToArray();
RestoreMapping(); RestoreMapping();
AutoRemoveDataCache();
return Db.ExecuteCommand(sql, paramters); return Db.ExecuteCommand(sql, paramters);
} }
public bool ExecuteCommandHasChange() public bool ExecuteCommandHasChange()
@ -270,6 +271,17 @@ namespace SqlSugar
} }
} }
private void AutoRemoveDataCache()
{
var moreSetts = this.Context.CurrentConnectionConfig.MoreSettings;
var extService = this.Context.CurrentConnectionConfig.ConfigureExternalServices;
if (moreSetts != null && moreSetts.IsAutoRemoveDataCache && extService != null && extService.DataInfoCacheService != null)
{
this.RemoveDataCache();
}
}
private IDeleteable<T> CopyDeleteable() private IDeleteable<T> CopyDeleteable()
{ {
var asyncContext = this.Context.Utilities.CopyContext(true); var asyncContext = this.Context.Utilities.CopyContext(true);

View File

@ -32,6 +32,7 @@ namespace SqlSugar
{ {
InsertBuilder.IsReturnIdentity = false; InsertBuilder.IsReturnIdentity = false;
PreToSql(); PreToSql();
AutoRemoveDataCache();
string sql = InsertBuilder.ToSqlString(); string sql = InsertBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
return Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); return Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
@ -41,6 +42,7 @@ namespace SqlSugar
{ {
InsertBuilder.IsReturnIdentity = true; InsertBuilder.IsReturnIdentity = true;
PreToSql(); PreToSql();
AutoRemoveDataCache();
string sql = InsertBuilder.ToSqlString(); string sql = InsertBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters); return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters);
@ -49,6 +51,7 @@ namespace SqlSugar
{ {
InsertBuilder.IsReturnIdentity = true; InsertBuilder.IsReturnIdentity = true;
PreToSql(); PreToSql();
AutoRemoveDataCache();
string sql = InsertBuilder.ToSqlString(); string sql = InsertBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
@ -57,6 +60,7 @@ namespace SqlSugar
{ {
InsertBuilder.IsReturnIdentity = true; InsertBuilder.IsReturnIdentity = true;
PreToSql(); PreToSql();
AutoRemoveDataCache();
string sql = InsertBuilder.ToSqlString(); string sql = InsertBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
return Convert.ToInt64( Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray())); return Convert.ToInt64( Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()));
@ -194,6 +198,15 @@ namespace SqlSugar
#endregion #endregion
#region Protected Methods #region Protected Methods
private void AutoRemoveDataCache()
{
var moreSetts = this.Context.CurrentConnectionConfig.MoreSettings;
var extService = this.Context.CurrentConnectionConfig.ConfigureExternalServices;
if (moreSetts != null && moreSetts.IsAutoRemoveDataCache && extService != null && extService.DataInfoCacheService != null)
{
this.RemoveDataCache();
}
}
protected virtual void PreToSql() protected virtual void PreToSql()
{ {
#region Identities #region Identities

View File

@ -439,6 +439,7 @@ namespace SqlSugar
{ {
Check.Exception(this.QueryBuilder.SelectValue.IsNullOrEmpty(), "MergeTable need to use Queryable.Select Method ."); 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 "); Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0 || this.QueryBuilder.OrderByValue.HasValue(), "MergeTable Queryable cannot Take Skip OrderBy PageToList ");
ToSqlBefore();
var sql = QueryBuilder.ToSqlString(); var sql = QueryBuilder.ToSqlString();
var tableName = this.SqlBuilder.GetPackTable(sql, "MergeTable"); var tableName = this.SqlBuilder.GetPackTable(sql, "MergeTable");
var mergeQueryable = this.Context.Queryable<ExpandoObject>(); var mergeQueryable = this.Context.Queryable<ExpandoObject>();
@ -607,6 +608,7 @@ namespace SqlSugar
public virtual KeyValuePair<string, List<SugarParameter>> ToSql() public virtual KeyValuePair<string, List<SugarParameter>> ToSql()
{ {
InitMapping(); InitMapping();
ToSqlBefore();
string sql = QueryBuilder.ToSqlString(); string sql = QueryBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters); return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters);
@ -1059,12 +1061,21 @@ namespace SqlSugar
protected int GetCount() protected int GetCount()
{ {
var sql = string.Empty; var sql = string.Empty;
ToSqlBefore();
sql = QueryBuilder.ToSqlString(); sql = QueryBuilder.ToSqlString();
sql = QueryBuilder.ToCountSql(sql); sql = QueryBuilder.ToCountSql(sql);
var reval = Context.Ado.GetInt(sql, QueryBuilder.Parameters.ToArray()); var reval = Context.Ado.GetInt(sql, QueryBuilder.Parameters.ToArray());
return reval; return reval;
} }
private void ToSqlBefore()
{
var moreSetts = this.Context.CurrentConnectionConfig.MoreSettings;
if (moreSetts != null && moreSetts.IsWithNoLockQuery&&string.IsNullOrEmpty(QueryBuilder.TableWithString)) {
this.With(SqlWith.NoLock);
}
}
protected List<TResult> GetData<TResult>(KeyValuePair<string, List<SugarParameter>> sqlObj) protected List<TResult> GetData<TResult>(KeyValuePair<string, List<SugarParameter>> sqlObj)
{ {
List<TResult> result; List<TResult> result;
@ -1286,6 +1297,24 @@ namespace SqlSugar
_GroupBy(expression); _GroupBy(expression);
return this; return this;
} }
public new ISugarQueryable<T, T2> Having(Expression<Func<T, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2> Having(Expression<Func<T, T2, bool>> expression)
{
this._Having(expression);
return this;
}
public new ISugarQueryable<T, T2> Having(string whereString, object whereObj)
{
base.Having(whereString, whereObj);
return this;
}
#endregion #endregion
#region Aggr #region Aggr
@ -1425,6 +1454,30 @@ namespace SqlSugar
_GroupBy(expression); _GroupBy(expression);
return this; return this;
} }
public new ISugarQueryable<T, T2, T3> Having(Expression<Func<T, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2, T3> Having(Expression<Func<T, T2, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2, T3> Having(Expression<Func<T, T2, T3, bool>> expression)
{
this._Having(expression);
return this;
}
public new ISugarQueryable<T, T2, T3> Having(string whereString, object whereObj)
{
base.Having(whereString, whereObj);
return this;
}
#endregion #endregion
#region Order #region Order
@ -1819,6 +1872,35 @@ namespace SqlSugar
_GroupBy(expression); _GroupBy(expression);
return this; return this;
} }
public new ISugarQueryable<T, T2, T3, T4> Having(Expression<Func<T, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2, T3, T4> Having(Expression<Func<T, T2, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2, T3, T4> Having(Expression<Func<T, T2, T3, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T, T2, T3, T4> Having(Expression<Func<T, T2, T3, T4, bool>> expression)
{
this._Having(expression);
return this;
}
public new ISugarQueryable<T, T2, T3, T4> Having(string whereString, object whereObj)
{
base.Having(whereString, whereObj);
return this;
}
#endregion #endregion
#region Aggr #region Aggr

View File

@ -432,7 +432,7 @@ namespace SqlSugar
{ {
result += (TableShortName + UtilConstants.Space); result += (TableShortName + UtilConstants.Space);
} }
if (this.TableWithString.HasValue()) if (this.TableWithString.HasValue()&&this.TableWithString!= SqlWith.Null)
{ {
result += TableWithString + UtilConstants.Space; result += TableWithString + UtilConstants.Space;
} }
@ -443,7 +443,7 @@ namespace SqlSugar
if (this.EasyJoinInfos.IsValuable()) if (this.EasyJoinInfos.IsValuable())
{ {
if (this.TableWithString.HasValue()) if (this.TableWithString.HasValue() && this.TableWithString != SqlWith.Null)
{ {
result += "," + string.Join(",", this.EasyJoinInfos.Select(it => string.Format("{0} {1} {2} ", GetTableName(it.Value), it.Key, TableWithString))); result += "," + string.Join(",", this.EasyJoinInfos.Select(it => string.Format("{0} {1} {2} ", GetTableName(it.Value), it.Key, TableWithString)));
} }

View File

@ -28,6 +28,7 @@ namespace SqlSugar
public virtual int ExecuteCommand() public virtual int ExecuteCommand()
{ {
PreToSql(); PreToSql();
AutoRemoveDataCache();
Check.Exception(UpdateBuilder.WhereValues.IsNullOrEmpty() && GetPrimaryKeys().IsNullOrEmpty(), "You cannot have no primary key and no conditions"); Check.Exception(UpdateBuilder.WhereValues.IsNullOrEmpty() && GetPrimaryKeys().IsNullOrEmpty(), "You cannot have no primary key and no conditions");
string sql = UpdateBuilder.ToSqlString(); string sql = UpdateBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();
@ -93,7 +94,15 @@ namespace SqlSugar
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(leftResultString, resultString)); UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(leftResultString, resultString));
return this; return this;
} }
private void AutoRemoveDataCache()
{
var moreSetts = this.Context.CurrentConnectionConfig.MoreSettings;
var extService = this.Context.CurrentConnectionConfig.ConfigureExternalServices;
if (moreSetts != null && moreSetts.IsAutoRemoveDataCache && extService!=null&& extService.DataInfoCacheService!=null)
{
this.RemoveDataCache();
}
}
public KeyValuePair<string, List<SugarParameter>> ToSql() public KeyValuePair<string, List<SugarParameter>> ToSql()
{ {
PreToSql(); PreToSql();

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlSugar
{
public class ConnMoreSettings
{
public bool IsAutoRemoveDataCache { get; set; }
public bool IsWithNoLockQuery { get; set; }
}
}

View File

@ -39,6 +39,10 @@ namespace SqlSugar
/// All operations within a transaction is ConnectionString /// All operations within a transaction is ConnectionString
/// </summary> /// </summary>
public List<SlaveConnectionConfig> SlaveConnectionConfigs { get; set; } public List<SlaveConnectionConfig> SlaveConnectionConfigs { get; set; }
/// <summary>
/// More Gobal Settings
/// </summary>
public ConnMoreSettings MoreSettings { get; set; }
} }
public class ConfigureExternalServices public class ConfigureExternalServices

View File

@ -15,5 +15,6 @@ namespace SqlSugar
public const string TabLockX = "WITH(TABLOCKX)"; public const string TabLockX = "WITH(TABLOCKX)";
public const string UpdLock = "WITH(UPDLOCK)"; public const string UpdLock = "WITH(UPDLOCK)";
public const string RowLock = "WITH(ROWLOCK)"; public const string RowLock = "WITH(ROWLOCK)";
public const string Null = "Non";
} }
} }

View File

@ -231,7 +231,11 @@ namespace SqlSugar
{ {
foreach (var item in args) foreach (var item in args)
{ {
AppendItem(parameter, name, args, model, item); var expItem = item;
if (item is UnaryExpression) {
expItem = (item as UnaryExpression).Operand;
}
AppendItem(parameter, name, args, model, expItem);
} }
if (appendArgs != null) if (appendArgs != null)
{ {

View File

@ -137,8 +137,50 @@ namespace SqlSugar
var reval = this.Context.EntityMaintenance.GetEntityInfo(type); var reval = this.Context.EntityMaintenance.GetEntityInfo(type);
return reval; return reval;
}); });
InitMppingInfo(entityInfo); var copyObj = CopyEntityInfo(entityInfo);
InitMppingInfo(copyObj);
} }
private EntityInfo CopyEntityInfo(EntityInfo entityInfo)
{
EntityInfo result = new EntityInfo()
{
DbTableName = entityInfo.DbTableName,
EntityName = entityInfo.EntityName,
Type = entityInfo.Type
};
List<EntityColumnInfo> columns = new List<EntityColumnInfo>();
if (entityInfo.Columns.HasValue())
{
foreach (var item in entityInfo.Columns)
{
EntityColumnInfo column = new EntityColumnInfo()
{
ColumnDescription = item.ColumnDescription,
DataType = item.DataType,
DbColumnName = item.DbColumnName,
DbTableName = item.DbTableName,
DecimalDigits = item.DecimalDigits,
DefaultValue = item.DefaultValue,
EntityName = item.EntityName,
IsIdentity = item.IsIdentity,
IsIgnore = item.IsIgnore,
IsNullable = item.IsNullable,
IsOnlyIgnoreInsert = item.IsOnlyIgnoreInsert,
IsPrimarykey = item.IsPrimarykey,
Length = item.Length,
OldDbColumnName = item.OldDbColumnName,
OracleSequenceName = item.OracleSequenceName,
PropertyInfo = item.PropertyInfo,
PropertyName = item.PropertyName
};
columns.Add(item);
}
}
result.Columns = columns;
return result;
}
private void InitMppingInfo(EntityInfo entityInfo) private void InitMppingInfo(EntityInfo entityInfo)
{ {
if (this.Context.MappingTables == null) if (this.Context.MappingTables == null)

View File

@ -376,7 +376,7 @@ namespace SqlSugar
} }
var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList()); var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList());
var allParameters = allItems.SelectMany(it => it.Value).ToArray(); var allParameters = allItems.SelectMany(it => it.Value).ToArray();
var resulut = base.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")); var resulut = base.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")).With(SqlWith.Null);
resulut.AddParameters(allParameters); resulut.AddParameters(allParameters);
return resulut.Select<T>(sqlBuilder.SqlSelectAll); return resulut.Select<T>(sqlBuilder.SqlSelectAll);
} }
@ -391,7 +391,7 @@ namespace SqlSugar
public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new() public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new()
{ {
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig); var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig);
return base.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).Select("*"); return base.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select("*");
} }
#endregion #endregion