mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 01:58:13 +08:00
-
This commit is contained in:
@@ -26,22 +26,24 @@ namespace OrmTest.UnitTest
|
||||
var s1= db.Insertable<Student>(insertObj).ToSql();
|
||||
|
||||
//Insert reutrn Command Count
|
||||
db.Insertable<Student>(insertObj).ExecuteCommand();
|
||||
var s2=db.Insertable<Student>(insertObj).ExecuteCommand();
|
||||
|
||||
db.IgnoreColumns = null;
|
||||
//Only insert Name
|
||||
db.Insertable<Student>(insertObj).InsertColumns(it => new object[] { it.Name}).ExecuteReutrnIdentity();
|
||||
var s3 = db.Insertable<Student>(insertObj).InsertColumns(it => new object[] { it.Name}).ToSql();
|
||||
|
||||
//Ignore Name and TestId
|
||||
db.Insertable<Student>(insertObj).IgnoreColumns(it => new object[] { it.Name,it.TestId }).ExecuteReutrnIdentity();
|
||||
var s4=db.Insertable<Student>(insertObj).IgnoreColumns(it => new object[] { it.Name,it.TestId }).ToSql();
|
||||
|
||||
//Use Lock
|
||||
db.Insertable<Student>(insertObj).With(SqlWith.UpdLock).ExecuteCommand();
|
||||
var s5=db.Insertable<Student>(insertObj).With(SqlWith.UpdLock).ToSql();
|
||||
|
||||
//ToSql
|
||||
db.Insertable<Student>(insertObj).With(SqlWith.UpdLock).InsertColumns(it => new object[] { it.Name }).ToSql();
|
||||
var s7= db.Insertable<Student>(insertObj).With(SqlWith.UpdLock)
|
||||
.InsertColumns(it => new object[] { it.Name }).ToSql();
|
||||
|
||||
//Insert List<T>
|
||||
db.Insertable<Student>(insertObjs).With(SqlWith.UpdLock).ExecuteCommand();
|
||||
var s8= db.Insertable<Student>(insertObjs).With(SqlWith.UpdLock).ToSql();
|
||||
}
|
||||
|
||||
public SqlSugarClient GetInstance()
|
||||
|
@@ -2,11 +2,14 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class InsertBuilder : IDMLBuilder
|
||||
{
|
||||
public InsertBuilder() {
|
||||
public InsertBuilder()
|
||||
{
|
||||
this.sql = new StringBuilder();
|
||||
this.DbColumnInfoList = new List<DbColumnInfo>();
|
||||
}
|
||||
@@ -14,20 +17,32 @@ namespace SqlSugar
|
||||
public ILambdaExpressions LambdaExpressions { get; set; }
|
||||
public ISqlBuilder Builder { get; set; }
|
||||
public StringBuilder sql { get; set; }
|
||||
public List<SugarParameter> Parameters { get; set; }
|
||||
public List<SugarParameter> Parameters { get; set; }
|
||||
public string TableName { get; set; }
|
||||
public string TableWithString { get; set; }
|
||||
public List<DbColumnInfo> DbColumnInfoList { get; set; }
|
||||
public bool IsInsertNull { get; set; }
|
||||
public bool IsReturnIdentity { get; set; }
|
||||
|
||||
public virtual string SqlTemplate
|
||||
{
|
||||
get
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
if (IsReturnIdentity)
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2}) ;SELECT SCOPE_IDENTITY();";
|
||||
}
|
||||
else
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2}) ;";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,12 +63,24 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType)
|
||||
{
|
||||
ILambdaExpressions resolveExpress = this.LambdaExpressions;
|
||||
this.LambdaExpressions.Clear();
|
||||
resolveExpress.MappingColumns = Context.MappingColumns;
|
||||
resolveExpress.MappingTables = Context.MappingTables;
|
||||
resolveExpress.IgnoreComumnList = Context.IgnoreColumns;
|
||||
resolveExpress.Resolve(expression, resolveType);
|
||||
this.Parameters = new List<SugarParameter>();
|
||||
this.Parameters.AddRange(resolveExpress.Parameters);
|
||||
var reval = resolveExpress.Result;
|
||||
return reval;
|
||||
}
|
||||
public virtual string ToSqlString()
|
||||
{
|
||||
string columnsString =string.Join("," ,this.DbColumnInfoList.Select(it => Builder.GetTranslationColumnName(it.ColumnName)));
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it =>Builder.SqlParameterKeyWord+it.ColumnName));
|
||||
return string.Format(SqlTemplate,GetTableNameString,columnsString, columnParametersString);
|
||||
string columnsString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.GetTranslationColumnName(it.ColumnName)));
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.ColumnName));
|
||||
return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -24,31 +24,40 @@ namespace SqlSugar
|
||||
private List<string> IgnoreColumnNameList { get; set; }
|
||||
public T[] InsertObjs { get; set; }
|
||||
|
||||
#region Core
|
||||
public int ExecuteCommand()
|
||||
{
|
||||
InsertBuilder.IsReturnIdentity = false;
|
||||
PreToSql();
|
||||
return Db.ExecuteCommand(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
|
||||
return Db.ExecuteCommand(InsertBuilder.ToSqlString(), InsertBuilder.Parameters.ToArray());
|
||||
}
|
||||
public KeyValuePair<string, List<SugarParameter>> ToSql()
|
||||
{
|
||||
InsertBuilder.IsReturnIdentity = true;
|
||||
PreToSql();
|
||||
string sql = InsertBuilder.ToSqlString();
|
||||
return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters);
|
||||
}
|
||||
|
||||
public int ExecuteReutrnIdentity()
|
||||
{
|
||||
InsertBuilder.IsReturnIdentity = true;
|
||||
PreToSql();
|
||||
return Db.GetInt(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
|
||||
}
|
||||
return Db.GetInt(InsertBuilder.ToSqlString(), InsertBuilder.Parameters.ToArray());
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Setting
|
||||
public IInsertable<T> IgnoreColumns(Expression<Func<T, object[]>> columns)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var ignoreColumns = InsertBuilder.GetExpressionValue(columns,ResolveExpressType.Array);
|
||||
this.InsertBuilder.DbColumnInfoList= this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.EntityPropertyName)).ToList();
|
||||
return this;
|
||||
}
|
||||
|
||||
public IInsertable<T> InsertColumns(Expression<Func<T, object[]>> columns)
|
||||
{
|
||||
var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.Array);
|
||||
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.EntityPropertyName)).ToList();
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -64,7 +73,8 @@ namespace SqlSugar
|
||||
this.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.Context.CurrentConnectionConfig);
|
||||
this.InsertBuilder.IsInsertNull = isInsertNull;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Private Methods
|
||||
private void PreToSql()
|
||||
@@ -75,7 +85,6 @@ namespace SqlSugar
|
||||
List<string> identities = Db.DbMaintenance.GetIsIdentities(this.InsertBuilder.TableName);
|
||||
if (identities != null && identities.Any())
|
||||
{
|
||||
var currentIgnoreColumns = this.Context.IgnoreColumns.Where(it => it.EntityName == this.EntityInfo.Name).ToList();
|
||||
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it =>
|
||||
{
|
||||
return !identities.Any(i => it.ColumnName.Equals(i, StringComparison.CurrentCultureIgnoreCase));
|
||||
|
@@ -6,12 +6,15 @@ namespace SqlSugar
|
||||
{
|
||||
public enum ResolveExpressType
|
||||
{
|
||||
WhereSingle = 0,
|
||||
WhereMultiple = 1,
|
||||
SelectSingle=2,
|
||||
SelectMultiple=3,
|
||||
FieldSingle=4,
|
||||
FieldMultiple=5,
|
||||
Join=6
|
||||
None = 0,
|
||||
WhereSingle = 1,
|
||||
WhereMultiple = 2,
|
||||
SelectSingle=3,
|
||||
SelectMultiple=4,
|
||||
FieldSingle=5,
|
||||
FieldMultiple=7,
|
||||
Join=8,
|
||||
Array=9
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -72,6 +72,10 @@ namespace SqlSugar
|
||||
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||
base.Context.Result.Append(fieldName);
|
||||
break;
|
||||
case ResolveExpressType.Array:
|
||||
fieldName = getArrayName(parameter, expression, isLeft);
|
||||
base.Context.Result.Append(fieldName);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -116,5 +120,10 @@ namespace SqlSugar
|
||||
string fieldName = Context.GetTranslationColumnName(expression.Member.Name);
|
||||
return fieldName;
|
||||
}
|
||||
private string getArrayName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
|
||||
{
|
||||
string fieldName = expression.Member.Name;
|
||||
return fieldName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,6 +22,13 @@ namespace SqlSugar
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
Check.ThrowNotSupportedException("NewArrayExpression");
|
||||
break;
|
||||
case ResolveExpressType.Array:
|
||||
foreach (var item in expression.Expressions)
|
||||
{
|
||||
base.Expression = item;
|
||||
base.Start();
|
||||
}
|
||||
break;
|
||||
case ResolveExpressType.Join:
|
||||
base.Context.ResolveType = ResolveExpressType.WhereMultiple;
|
||||
int i = 0;
|
||||
@@ -35,7 +42,7 @@ namespace SqlSugar
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
base.Context.Result.Append(","+parameter.CommonTempData.ObjToString() + ",");
|
||||
base.Context.Result.Append("," + parameter.CommonTempData.ObjToString() + ",");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -238,7 +238,7 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Insertable
|
||||
public virtual IInsertable<T> Insertable<T>(params T[] insertObjs) where T : class, new()
|
||||
public virtual IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new()
|
||||
{
|
||||
var reval = new InsertableProvider<T>();
|
||||
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ;
|
||||
@@ -248,11 +248,15 @@ namespace SqlSugar
|
||||
reval.InsertObjs = insertObjs;
|
||||
sqlBuilder.InsertBuilder = reval.InsertBuilder = InstanceFactory.GetInsertBuilder(base.CurrentConnectionConfig);
|
||||
sqlBuilder.InsertBuilder.Builder = sqlBuilder;
|
||||
sqlBuilder.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
|
||||
sqlBuilder.Context = reval.SqlBuilder.InsertBuilder.Context = this;
|
||||
reval.Init();
|
||||
return reval;
|
||||
}
|
||||
|
||||
public virtual IInsertable<T> Insertable<T>(T insertObj) where T : class, new()
|
||||
{
|
||||
return this.Insertable(new T[] { insertObj});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SqlQuery
|
||||
|
Reference in New Issue
Block a user