diff --git a/OrmTest/OrmTest.csproj b/OrmTest/OrmTest.csproj
index 015d645df..203588ab5 100644
--- a/OrmTest/OrmTest.csproj
+++ b/OrmTest/OrmTest.csproj
@@ -62,6 +62,7 @@
+
diff --git a/OrmTest/Program.cs b/OrmTest/Program.cs
index a42594b06..9243e183f 100644
--- a/OrmTest/Program.cs
+++ b/OrmTest/Program.cs
@@ -18,13 +18,13 @@ namespace OrmTest
static void Main(string[] args)
{
//Unit Test
- //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(200).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();
//Performance Test
//new SqlSugarPerformance(100).Select();
diff --git a/OrmTest/UnitTest/Insert.cs b/OrmTest/UnitTest/Insert.cs
new file mode 100644
index 000000000..03f1b7664
--- /dev/null
+++ b/OrmTest/UnitTest/Insert.cs
@@ -0,0 +1,52 @@
+using OrmTest.Models;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OrmTest.UnitTest
+{
+ public class Insert : ExpTestBase
+ {
+ private Insert() { }
+ public Insert(int eachCount)
+ {
+ this.Count = eachCount;
+ }
+
+ public void Init() {
+ var db = GetInstance();
+ var insertObj = new Student() { Name="jack",CreateTime=DateTime.Now };
+ var insertObjs = new List() { insertObj }.ToArray();
+
+ //Insert reutrn identity
+ db.Insertable(insertObj).ExecuteReutrnIdentity();
+
+ //Insert reutrn Command Count
+ db.Insertable(insertObj).ExecuteCommand();
+
+ //Only insert Name
+ db.Insertable(insertObj).InsertColumns(it => new object[] { it.Name}).ExecuteReutrnIdentity();
+
+ //Ignore Name and TestId
+ db.Insertable(insertObj).IgnoreColumns(it => new object[] { it.Name,it.TestId }).ExecuteReutrnIdentity();
+
+ //Use Lock
+ db.Insertable(insertObj).With(SqlWith.UpdLock).ExecuteCommand();
+
+ //ToSql
+ db.Insertable(insertObj).With(SqlWith.UpdLock).InsertColumns(it => new object[] { it.Name }).ToSql();
+
+ //Insert List
+ db.Insertable(insertObjs).With(SqlWith.UpdLock).ExecuteCommand();
+ }
+
+ public SqlSugarClient GetInstance()
+ {
+ SqlSugarClient db = new SqlSugarClient(new SystemTablesConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection=true });
+ return db;
+ }
+ }
+}
diff --git a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/DeleteBuilder.cs b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/DeleteBuilder.cs
index 15f18a2ea..9d15fe4f1 100644
--- a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/DeleteBuilder.cs
+++ b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/DeleteBuilder.cs
@@ -19,6 +19,19 @@ namespace SqlSugar
}
}
+ public List Parameters
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
public StringBuilder sql
{
get
diff --git a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/InsertBuilder.cs b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/InsertBuilder.cs
index 96d0f8227..71f38c048 100644
--- a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/InsertBuilder.cs
+++ b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/InsertBuilder.cs
@@ -1,52 +1,57 @@
using System;
+using System.Collections.Generic;
using System.Text;
-
+using System.Linq;
namespace SqlSugar
{
public class InsertBuilder : IDMLBuilder
{
- public SqlSugarClient Context
- {
- get
- {
- throw new NotImplementedException();
- }
-
- set
- {
- throw new NotImplementedException();
- }
+ public InsertBuilder() {
+ this.sql = new StringBuilder();
}
+ public SqlSugarClient Context { get; set; }
+ public ILambdaExpressions LambdaExpressions { get; set; }
+ public ISqlBuilder Builder { get; set; }
+ public StringBuilder sql { get; set; }
+ public List Parameters { get; set; }
+ public string EntityName { get; set; }
+ public string TableWithString { get; set; }
+ public List ColumNames{ get; set; }
- public StringBuilder sql
+ public virtual string SqlTemplate
{
get
{
- throw new NotImplementedException();
- }
-
- set
- {
- throw new NotImplementedException();
- }
- }
-
- public string SqlTemplate
- {
- get
- {
- throw new NotImplementedException();
+ return @"INSERT INTO {0}
+ ({1})
+ VALUES
+ ({2})";
}
}
public void Clear()
{
- throw new NotImplementedException();
+
+ }
+ public virtual string GetTableNameString
+ {
+ get
+ {
+ var result = Builder.GetTranslationTableName(EntityName);
+ result += PubConst.Space;
+ if (this.TableWithString.IsValuable())
+ {
+ result += TableWithString + PubConst.Space;
+ }
+ return result;
+ }
}
public string ToSqlString()
{
- throw new NotImplementedException();
+ string columnsString =string.Join("," ,this.ColumNames.Select(it => Builder.GetTranslationColumnName(it)));
+ string columnParametersString = string.Join(",", this.ColumNames.Select(it =>Builder.SqlParameterKeyWord+it));
+ return string.Format(this.sql.ToString(),columnsString, columnParametersString);
}
}
}
diff --git a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/QueryBuilder.cs b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/QueryBuilder.cs
index 6a01db90b..11cce1d07 100644
--- a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/QueryBuilder.cs
+++ b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/QueryBuilder.cs
@@ -13,7 +13,7 @@ namespace SqlSugar
public QueryBuilder()
{
- this.QueryPars = new List();
+ this.Parameters = new List();
}
#region Private Fileds
@@ -42,7 +42,7 @@ namespace SqlSugar
public string GroupByValue { get; set; }
public int WhereIndex { get; set; }
public int JoinIndex { get; set; }
- public virtual List QueryPars { get; set; }
+ public virtual List Parameters { get; set; }
public virtual List JoinQueryInfos
{
get
@@ -191,8 +191,8 @@ namespace SqlSugar
resolveExpress.MappingTables = Context.MappingTables;
resolveExpress.IgnoreComumnList = Context.IgnoreComumns;
resolveExpress.Resolve(expression, resolveType);
- this.QueryPars = new List();
- this.QueryPars.AddRange(resolveExpress.Parameters);
+ this.Parameters = new List();
+ this.Parameters.AddRange(resolveExpress.Parameters);
var reval = resolveExpress.Result;
return reval;
}
@@ -234,7 +234,7 @@ namespace SqlSugar
this.Take = 0;
this.sql = null;
this.WhereIndex = 0;
- this.QueryPars = null;
+ this.Parameters = null;
this.GroupByValue = null;
this._TableNameString = null;
this.WhereInfos = null;
diff --git a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/SqlQueryBuilder.cs b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/SqlQueryBuilder.cs
index d1aab3990..c414fbeaa 100644
--- a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/SqlQueryBuilder.cs
+++ b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/SqlQueryBuilder.cs
@@ -51,6 +51,19 @@ namespace SqlSugar
}
}
+ public List Parameters
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
public string ToSqlString()
{
throw new NotImplementedException();
diff --git a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/UpdateBuilder.cs b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/UpdateBuilder.cs
index ebed4e370..2edf9b3ee 100644
--- a/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/UpdateBuilder.cs
+++ b/SqlSugar/Abstract/DbProvider/SqlBuilderProvider/DMLBuilder/UpdateBuilder.cs
@@ -20,6 +20,19 @@ namespace SqlSugar
}
}
+ public List Parameters
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
public StringBuilder sql
{
get
diff --git a/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs
new file mode 100644
index 000000000..d7aedd3a2
--- /dev/null
+++ b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SqlSugar
+{
+ public class InsertableProvider : IInsertable where T : class, new()
+ {
+ public SqlSugarClient Context { get; set; }
+ public IDb Db { get { return Context.Database; } }
+ public IDbBind Bind { get { return this.Db.DbBind; } }
+ public ISqlBuilder SqlBuilder { get; set; }
+ public InsertBuilder InsertBuilder
+ {
+ get
+ {
+ return this.SqlBuilder.InsertBuilder;
+ }
+ }
+ public int ExecuteCommand()
+ {
+ return Db.ExecuteCommand(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
+ }
+ public KeyValuePair> ToSql()
+ {
+ string sql = InsertBuilder.ToSqlString();
+ return new KeyValuePair>(sql, InsertBuilder.Parameters);
+ }
+
+ public int ExecuteReutrnIdentity()
+ {
+ return Db.GetInt(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
+ }
+
+ public IInsertable IgnoreColumns(Expression> columns)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IInsertable Insert(T InsertObj)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IInsertable InsertColumns(Expression> columns)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IInsertable InsertRange(List InsertObjs)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IInsertable With(string lockString)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs
index 167e7f15a..552582436 100644
--- a/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs
+++ b/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs
@@ -31,12 +31,12 @@ namespace SqlSugar
public ISugarQueryable AddParameters(object whereObj)
{
if (whereObj != null)
- QueryBuilder.QueryPars.AddRange(Context.Database.GetParameters(whereObj));
+ QueryBuilder.Parameters.AddRange(Context.Database.GetParameters(whereObj));
return this;
}
public ISugarQueryable AddParameters(SugarParameter[] pars)
{
- QueryBuilder.QueryPars.AddRange(pars);
+ QueryBuilder.Parameters.AddRange(pars);
return this;
}
@@ -71,7 +71,7 @@ namespace SqlSugar
var whereValue = QueryBuilder.WhereInfos;
whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString));
if (whereObj != null)
- QueryBuilder.QueryPars.AddRange(Context.Database.GetParameters(whereObj));
+ QueryBuilder.Parameters.AddRange(Context.Database.GetParameters(whereObj));
return this;
}
public ISugarQueryable Where(Expression> expression)
@@ -109,7 +109,7 @@ namespace SqlSugar
QueryBuilder.HavingInfos = SqlBuilder.AppendHaving(whereString);
if (whereObj != null)
- QueryBuilder.QueryPars.AddRange(Context.Database.GetParameters(whereObj));
+ QueryBuilder.Parameters.AddRange(Context.Database.GetParameters(whereObj));
return this;
}
public ISugarQueryable Having(Expression> expression)
@@ -420,7 +420,7 @@ namespace SqlSugar
{
QueryBuilder.IsCount = true;
var sql = QueryBuilder.ToSqlString();
- var reval = Context.Database.GetInt(sql, QueryBuilder.QueryPars.ToArray());
+ var reval = Context.Database.GetInt(sql, QueryBuilder.Parameters.ToArray());
QueryBuilder.IsCount = false;
return reval;
}
@@ -501,7 +501,7 @@ namespace SqlSugar
public KeyValuePair> ToSql()
{
string sql = QueryBuilder.ToSqlString();
- return new KeyValuePair>(sql, QueryBuilder.QueryPars);
+ return new KeyValuePair>(sql, QueryBuilder.Parameters);
}
public ISugarQueryable With(string withString)
@@ -554,7 +554,7 @@ namespace SqlSugar
var reval = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig);
reval.Context = this.Context;
reval.SqlBuilder = this.SqlBuilder;
- reval.SqlBuilder.QueryBuilder.QueryPars = QueryBuilder.QueryPars;
+ reval.SqlBuilder.QueryBuilder.Parameters = QueryBuilder.Parameters;
reval.SqlBuilder.QueryBuilder.SelectValue = expression;
return reval;
}
@@ -599,7 +599,7 @@ namespace SqlSugar
}
else
{
- var reval = this.Bind.DataReaderToList(tType, dataReader, QueryBuilder.SelectCacheKey);
+ result = this.Bind.DataReaderToList(tType, dataReader, QueryBuilder.SelectCacheKey);
}
if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection) this.Context.Close();
}
diff --git a/SqlSugar/Entities/SqlWith.cs b/SqlSugar/Entities/SqlWith.cs
index 603169267..0560e0226 100644
--- a/SqlSugar/Entities/SqlWith.cs
+++ b/SqlSugar/Entities/SqlWith.cs
@@ -9,5 +9,11 @@ namespace SqlSugar
public partial class SqlWith
{
public const string NoLock = "WITH(NOLOCK) ";
+ public const string HoldLock = "WITH(HOLDLOCK)";
+ public const string PagLock = "WITH(PAGLOCK)";
+ public const string ReadCommitted = "WITH(READCOMMITTED)";
+ public const string TabLockX = "WITH(TABLOCKX)";
+ public const string UpdLock = "WITH(UPDLOCK)";
+ public const string RowLock = "WITH(ROWLOCK)";
}
}
diff --git a/SqlSugar/Interface/IDeleteable.cs b/SqlSugar/Interface/IDeleteable.cs
new file mode 100644
index 000000000..c1c537e3d
--- /dev/null
+++ b/SqlSugar/Interface/IDeleteable.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SqlSugar
+{
+ public interface IDeleteable
+ {
+ int ExecuteCommand();
+ IInsertable TableName(string name);
+ IInsertable With(string lockString);
+ IInsertable Where(T deleteObj);
+ IInsertable Where(Expression> expression);
+ IInsertable Where(List deleteObjs);
+ IInsertable Where(PkType primaryKeyValue);
+ IInsertable Where(PkType [] primaryKeyValues);
+ IInsertable Where(string whereString,object whereObj);
+ }
+}
diff --git a/SqlSugar/Interface/ISqlBuilder/IDMLBuilder.cs b/SqlSugar/Interface/ISqlBuilder/IDMLBuilder.cs
index 8793eae54..d067f5647 100644
--- a/SqlSugar/Interface/ISqlBuilder/IDMLBuilder.cs
+++ b/SqlSugar/Interface/ISqlBuilder/IDMLBuilder.cs
@@ -8,6 +8,7 @@ namespace SqlSugar
public partial interface IDMLBuilder
{
string SqlTemplate { get; }
+ List Parameters { get; set; }
SqlSugarClient Context { get; set; }
StringBuilder sql { get; set; }
string ToSqlString();
diff --git a/SqlSugar/Interface/IUpdateable.cs b/SqlSugar/Interface/IUpdateable.cs
new file mode 100644
index 000000000..a74a0af2d
--- /dev/null
+++ b/SqlSugar/Interface/IUpdateable.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SqlSugar
+{
+ public interface IUpdateable
+ {
+ int ExecuteCommand();
+ IInsertable With(string lockString);
+ IInsertable Update(T InsertObj);
+ IInsertable Where(bool isUpdateNull);
+ IInsertable UpdateColumns(Expression> columns);
+ IInsertable IgnoreColumns(Expression> columns);
+ IInsertable UpdateRange(List InsertObjs);
+ }
+}
diff --git a/SqlSugar/Interface/Insertable.cs b/SqlSugar/Interface/Insertable.cs
new file mode 100644
index 000000000..fc47a0048
--- /dev/null
+++ b/SqlSugar/Interface/Insertable.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SqlSugar
+{
+ public interface IInsertable
+ {
+ int ExecuteCommand();
+ int ExecuteReutrnIdentity();
+ IInsertable With(string lockString);
+ IInsertable InsertColumns(Expression> columns);
+ IInsertable IgnoreColumns(Expression> columns);
+ KeyValuePair> ToSql();
+
+ }
+}
diff --git a/SqlSugar/SqlSugar.csproj b/SqlSugar/SqlSugar.csproj
index 068ada3cf..1a9e64ecf 100644
--- a/SqlSugar/SqlSugar.csproj
+++ b/SqlSugar/SqlSugar.csproj
@@ -53,6 +53,7 @@
+
@@ -139,11 +140,14 @@
+
+
+
@@ -152,9 +156,8 @@
-
-
-
+
+
diff --git a/SqlSugar/SqlSugarClient.cs b/SqlSugar/SqlSugarClient.cs
index bb2b0f690..cdc9d2b66 100644
--- a/SqlSugar/SqlSugarClient.cs
+++ b/SqlSugar/SqlSugarClient.cs
@@ -128,6 +128,21 @@ namespace SqlSugar
reval.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
return reval;
}
+
+ public virtual IInsertable Insertable(params T [] insertObj) where T : class, new()
+ {
+ var reval = new InsertableProvider();
+ reval.Context = this;
+ var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ;
+ reval.SqlBuilder = sqlBuilder;
+ reval.SqlBuilder.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig);
+ reval.SqlBuilder.QueryBuilder.Builder = sqlBuilder;
+ reval.SqlBuilder.Context = reval.SqlBuilder.QueryBuilder.Context = this;
+ reval.SqlBuilder.QueryBuilder.EntityName = typeof(T).Name;
+ reval.SqlBuilder.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
+ return reval;
+ }
+
///
/// Lambda Query operation
///