This commit is contained in:
sunkaixuan
2017-05-07 23:26:49 +08:00
parent b14c75f21e
commit 37647b7054
7 changed files with 91 additions and 30 deletions

View File

@@ -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()

View File

@@ -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);
}
}
}

View File

@@ -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));

View File

@@ -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
}
}

View File

@@ -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;
}
}
}

View File

@@ -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
{

View File

@@ -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