mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
Merge branch 'dev' of https://github.com/sunkaixuan/SqlSugar
This commit is contained in:
@@ -61,9 +61,10 @@
|
||||
<Compile Include="PerformanceTesting\PerformanceBase.cs" />
|
||||
<Compile Include="PerformanceTesting\SqlSugarPerformance.cs" />
|
||||
<Compile Include="UnitTest\Delete.cs" />
|
||||
<Compile Include="UnitTest\ExpressionTest\ExpTestBase.cs" />
|
||||
<Compile Include="UnitTest\UnitTestBase.cs" />
|
||||
<Compile Include="UnitTest\ExpressionTest\Field.cs" />
|
||||
<Compile Include="UnitTest\Insert.cs" />
|
||||
<Compile Include="UnitTest\Mapping .cs" />
|
||||
<Compile Include="UnitTest\Query\JoinQuery.cs" />
|
||||
<Compile Include="UnitTest\ExpressionTest\Method.cs" />
|
||||
<Compile Include="UnitTest\ExpressionTest\Select.cs" />
|
||||
|
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest
|
||||
{
|
||||
public class Delete : ExpTestBase
|
||||
public class Delete : UnitTestBase
|
||||
{
|
||||
private Delete() { }
|
||||
public Delete(int eachCount)
|
||||
|
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Field : ExpTestBase
|
||||
public class Field : UnitTestBase
|
||||
{
|
||||
private Field() { }
|
||||
public Field(int eachCount)
|
||||
|
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Method : ExpTestBase
|
||||
public class Method : UnitTestBase
|
||||
{
|
||||
private Method() { }
|
||||
public Method(int eachCount)
|
||||
|
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Select : ExpTestBase
|
||||
public class Select : UnitTestBase
|
||||
{
|
||||
private Select() { }
|
||||
public Select(int eachCount)
|
||||
|
@@ -9,7 +9,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Where : ExpTestBase
|
||||
public class Where : UnitTestBase
|
||||
{
|
||||
private Where() { }
|
||||
public Where(int eachCount)
|
||||
|
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Insert : ExpTestBase
|
||||
public class Insert : UnitTestBase
|
||||
{
|
||||
private Insert() { }
|
||||
public Insert(int eachCount)
|
||||
@@ -19,34 +19,40 @@ namespace OrmTest.UnitTest
|
||||
public void Init() {
|
||||
var db = GetInstance();
|
||||
var insertObj = new Student() { Name="jack",CreateTime=DateTime.Now };
|
||||
var insertObjs = new List<Student>() { insertObj }.ToArray();
|
||||
db.IgnoreColumns.Add("TestId", "Student");
|
||||
//db.MappingColumns.Add("id","dbid", "Student");
|
||||
|
||||
var s1= db.Insertable<Student>(insertObj).ToSql();
|
||||
var s1= db.Insertable(insertObj).ToSql();
|
||||
|
||||
//Insert reutrn Command Count
|
||||
var s2=db.Insertable<Student>(insertObj).ExecuteCommand();
|
||||
var s2=db.Insertable(insertObj).ExecuteCommand();
|
||||
|
||||
db.IgnoreColumns = null;
|
||||
//Only insert Name
|
||||
var s3 = db.Insertable<Student>(insertObj).InsertColumns(it => new {it.Name}).ToSql();
|
||||
var s3 = db.Insertable(insertObj).InsertColumns(it => new {it.Name}).ToSql();
|
||||
|
||||
//Ignore Name and TestId
|
||||
var s4=db.Insertable<Student>(insertObj).IgnoreColumns(it => new{ it.Name,it.TestId }).ToSql();
|
||||
var s4=db.Insertable(insertObj).IgnoreColumns(it => new{ it.Name,it.TestId }).ToSql();
|
||||
|
||||
//Ignore Name and TestId
|
||||
var s5 = db.Insertable<Student>(insertObj).IgnoreColumns(it => it == "Name" || it == "TestId").With(SqlWith.UpdLock).ToSql();
|
||||
var s5 = db.Insertable(insertObj).IgnoreColumns(it => it == "Name" || it == "TestId").With(SqlWith.UpdLock).ToSql();
|
||||
|
||||
//Use Lock
|
||||
var s6 =db.Insertable<Student>(insertObj).With(SqlWith.UpdLock).ToSql();
|
||||
var s6 =db.Insertable(insertObj).With(SqlWith.UpdLock).ToSql();
|
||||
|
||||
//ToSql
|
||||
var s7= db.Insertable<Student>(insertObj).With(SqlWith.UpdLock)
|
||||
var s7= db.Insertable(insertObj).With(SqlWith.UpdLock)
|
||||
.InsertColumns(it => new { it.Name }).ToSql();
|
||||
|
||||
db.IgnoreColumns = new IgnoreComumnList();
|
||||
db.IgnoreColumns.Add("TestId", "Student");
|
||||
//Insert List<T>
|
||||
var s8= db.Insertable<Student>(insertObjs).With(SqlWith.UpdLock).ToSql();
|
||||
var insertObjs = new List<Student>();
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
insertObjs.Add(new Student() { Name="name"+i });
|
||||
}
|
||||
var s8= db.Insertable(insertObjs.ToArray()).InsertColumns(it=>new{ it.Name}).With(SqlWith.UpdLock).ToSql();
|
||||
}
|
||||
|
||||
public SqlSugarClient GetInstance()
|
||||
|
31
OrmTest/UnitTest/Mapping .cs
Normal file
31
OrmTest/UnitTest/Mapping .cs
Normal file
@@ -0,0 +1,31 @@
|
||||
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 Mapping:UnitTestBase
|
||||
{
|
||||
private Mapping() { }
|
||||
public Mapping(int eachCount)
|
||||
{
|
||||
this.Count = eachCount;
|
||||
}
|
||||
|
||||
public void Init() {
|
||||
|
||||
var db = GetInstance();
|
||||
var s1= db.Queryable<Student>().ToSql();
|
||||
}
|
||||
|
||||
public SqlSugarClient GetInstance()
|
||||
{
|
||||
SqlSugarClient db = new SqlSugarClient(new AttrbuitesCofnig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true, EntityNamespace= "OrmTest.Models" });
|
||||
return db;
|
||||
}
|
||||
}
|
||||
}
|
@@ -8,7 +8,7 @@ using System.Linq.Expressions;
|
||||
using OrmTest.Models;
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class JoinQuery : ExpTestBase
|
||||
public class JoinQuery : UnitTestBase
|
||||
{
|
||||
private JoinQuery() { }
|
||||
public JoinQuery(int eachCount)
|
||||
|
@@ -8,7 +8,7 @@ using System.Linq.Expressions;
|
||||
using OrmTest.Models;
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class SelectQuery : ExpTestBase
|
||||
public class SelectQuery : UnitTestBase
|
||||
{
|
||||
private SelectQuery() { }
|
||||
public SelectQuery(int eachCount)
|
||||
|
@@ -8,7 +8,7 @@ using System.Linq.Expressions;
|
||||
using OrmTest.Models;
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class SingleQuery : ExpTestBase
|
||||
public class SingleQuery : UnitTestBase
|
||||
{
|
||||
private SingleQuery() { }
|
||||
public SingleQuery(int eachCount)
|
||||
|
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class Attribute : ExpTestBase
|
||||
public class Attribute : UnitTestBase
|
||||
{
|
||||
public Attribute(int eachCount)
|
||||
{
|
||||
|
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class AutoClose : ExpTestBase
|
||||
public class AutoClose : UnitTestBase
|
||||
{
|
||||
public AutoClose(int eachCount)
|
||||
{
|
||||
|
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class MapColumn : ExpTestBase
|
||||
public class MapColumn : UnitTestBase
|
||||
{
|
||||
public SqlSugarClient GetInstance()
|
||||
{
|
||||
|
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class MapTable : ExpTestBase
|
||||
public class MapTable : UnitTestBase
|
||||
{
|
||||
public void Init()
|
||||
{
|
||||
|
@@ -4,7 +4,7 @@ using SqlSugar;
|
||||
using System.Linq;
|
||||
namespace OrmTest.UnitTest
|
||||
{
|
||||
public class ExpTestBase
|
||||
public class UnitTestBase
|
||||
{
|
||||
public int Count { get; set; }
|
||||
private DateTime BeginTime { get; set; }
|
@@ -86,33 +86,36 @@ namespace SqlSugar
|
||||
{
|
||||
this.GetTableInfoList();
|
||||
}
|
||||
var entity = this.Context.MappingTables.SingleOrDefault(it => it.DbTableName.Equals(tableName, StringComparison.CurrentCultureIgnoreCase));
|
||||
var entityName = entity == null ? tableName : entity.EntityName;
|
||||
var assembly = Assembly.Load(this.Context.EntityNamespace.Split('.').First());
|
||||
foreach (var item in assembly.GetType(this.Context.EntityNamespace + "." + entityName).GetProperties())
|
||||
var entities = this.Context.MappingTables.Where(it => it.DbTableName.Equals(tableName, StringComparison.CurrentCultureIgnoreCase)).ToList();
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
var isVirtual = item.GetGetMethod().IsVirtual;
|
||||
if (isVirtual) continue;
|
||||
var sugarColumn = item.GetCustomAttributes(typeof(SugarColumn), true)
|
||||
.Where(it => it is SugarColumn)
|
||||
.Select(it => (SugarColumn)it)
|
||||
.Where(it => it.ColumnName.IsValuable())
|
||||
.FirstOrDefault();
|
||||
if (sugarColumn.IsNullOrEmpty())
|
||||
var entityName = entity == null ? tableName : entity.EntityName;
|
||||
var assembly = Assembly.Load(this.Context.EntityNamespace.Split('.').First());
|
||||
foreach (var item in assembly.GetType(this.Context.EntityNamespace + "." + entityName).GetProperties())
|
||||
{
|
||||
reval.Add(new DbColumnInfo() { ColumnName = item.Name });
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sugarColumn.IsIgnore == false)
|
||||
var isVirtual = item.GetGetMethod().IsVirtual;
|
||||
if (isVirtual) continue;
|
||||
var sugarColumn = item.GetCustomAttributes(typeof(SugarColumn), true)
|
||||
.Where(it => it is SugarColumn)
|
||||
.Select(it => (SugarColumn)it)
|
||||
.Where(it => it.ColumnName.IsValuable())
|
||||
.FirstOrDefault();
|
||||
if (sugarColumn.IsNullOrEmpty())
|
||||
{
|
||||
var columnInfo = new DbColumnInfo();
|
||||
columnInfo.ColumnName = sugarColumn.ColumnName.IsNullOrEmpty() ? item.Name : sugarColumn.ColumnName;
|
||||
columnInfo.IsPrimarykey = sugarColumn.IsPrimaryKey;
|
||||
columnInfo.IsIdentity = sugarColumn.IsIdentity;
|
||||
columnInfo.ColumnDescription = sugarColumn.ColumnDescription;
|
||||
columnInfo.TableName = entity.IsNullOrEmpty() ? tableName : entity.DbTableName;
|
||||
reval.Add(columnInfo);
|
||||
reval.Add(new DbColumnInfo() { ColumnName = item.Name });
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sugarColumn.IsIgnore == false)
|
||||
{
|
||||
var columnInfo = new DbColumnInfo();
|
||||
columnInfo.ColumnName = sugarColumn.ColumnName.IsNullOrEmpty() ? item.Name : sugarColumn.ColumnName;
|
||||
columnInfo.IsPrimarykey = sugarColumn.IsPrimaryKey;
|
||||
columnInfo.IsIdentity = sugarColumn.IsIdentity;
|
||||
columnInfo.ColumnDescription = sugarColumn.ColumnDescription;
|
||||
columnInfo.TableName = entity.IsNullOrEmpty() ? tableName : entity.DbTableName;
|
||||
reval.Add(columnInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -46,6 +46,26 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
public virtual string SqlTemplateBatch {
|
||||
get {
|
||||
return "INSERT {0} ({1})";
|
||||
}
|
||||
}
|
||||
|
||||
public virtual string SqlTemplateBatchSelect {
|
||||
get {
|
||||
return "{0} AS {1}";
|
||||
}
|
||||
}
|
||||
|
||||
public virtual string SqlTemplateBatchUnion
|
||||
{
|
||||
get
|
||||
{
|
||||
return "\t\r\nUNION ALL ";
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Clear()
|
||||
{
|
||||
|
||||
@@ -78,9 +98,60 @@ namespace SqlSugar
|
||||
}
|
||||
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);
|
||||
var groupList = DbColumnInfoList.GroupBy(it => it.TableId).ToList();
|
||||
var isSingle = groupList.Count() == 1;
|
||||
string columnsString = string.Join(",", groupList.First().Select(it => Builder.GetTranslationColumnName(it.ColumnName)));
|
||||
if (isSingle)
|
||||
{
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.ColumnName));
|
||||
return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString);
|
||||
}
|
||||
else {
|
||||
StringBuilder batchInsetrSql = new StringBuilder();
|
||||
int pageSize = 200;
|
||||
int pageIndex = 1;
|
||||
int totalRecord = groupList.Count;
|
||||
int pageCount = (totalRecord + pageSize - 1) / pageSize;
|
||||
while (pageCount >= pageIndex) {
|
||||
batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString);
|
||||
int i = 0;
|
||||
foreach (var columns in groupList.Skip((pageIndex-1)*pageSize).Take(pageSize).ToList())
|
||||
{
|
||||
var isFirst = i == 0;
|
||||
if (!isFirst)
|
||||
{
|
||||
batchInsetrSql.Append(SqlTemplateBatchUnion);
|
||||
}
|
||||
batchInsetrSql.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), it.ColumnName))));
|
||||
++i;
|
||||
}
|
||||
pageIndex++;
|
||||
batchInsetrSql.Append("\r\nGO\r\n");
|
||||
}
|
||||
return batchInsetrSql.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public object FormatValue(object value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return "NULL";
|
||||
}
|
||||
else {
|
||||
var type = value.GetType();
|
||||
if (type == PubConst.DateType)
|
||||
{
|
||||
return "'" + value.ObjToDate().ToString("yyyy-MM-dd hh:mm:ss.ms") + "'";
|
||||
}
|
||||
else if (type == PubConst.StringType|| type == PubConst.ObjType)
|
||||
{
|
||||
return "N'" + value.ToString().ToSqlFilter() + "'";
|
||||
}
|
||||
else {
|
||||
return "N'" + value.ToString() + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -105,7 +105,14 @@ namespace SqlSugar
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public IDeleteable<T> In<PkType>(List<PkType> primaryKeyValues) {
|
||||
if (primaryKeyValues == null || primaryKeyValues.Count() == 0)
|
||||
{
|
||||
Where("1=2 ");
|
||||
return this;
|
||||
}
|
||||
return In<PkType>(primaryKeyValues.ToArray());
|
||||
}
|
||||
public IDeleteable<T> In<PkType>(PkType[] primaryKeyValues)
|
||||
{
|
||||
if (primaryKeyValues == null || primaryKeyValues.Count() == 0)
|
||||
|
@@ -153,6 +153,7 @@ namespace SqlSugar
|
||||
insertItem.Add(columnInfo);
|
||||
}
|
||||
this.InsertBuilder.DbColumnInfoList.AddRange(insertItem);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
private string GetDbColumnName(string entityName)
|
||||
|
@@ -16,6 +16,7 @@ namespace SqlSugar
|
||||
IDeleteable<T> Where(List<T> deleteObjs);
|
||||
IDeleteable<T> In<PkType>(PkType primaryKeyValue);
|
||||
IDeleteable<T> In<PkType>(PkType[] primaryKeyValues);
|
||||
IDeleteable<T> In<PkType>(List<PkType> primaryKeyValues);
|
||||
IDeleteable<T> Where(string whereString,object whereObj=null);
|
||||
KeyValuePair<string, List<SugarParameter>> ToSql();
|
||||
}
|
||||
|
@@ -253,6 +253,11 @@ namespace SqlSugar
|
||||
reval.Init();
|
||||
return reval;
|
||||
}
|
||||
public virtual IInsertable<T> Insertable<T>(List<T> insertObjs) where T : class, new()
|
||||
{
|
||||
Check.ArgumentNullException(insertObjs, "Insertable.insertObjs can't be null");
|
||||
return this.Insertable(insertObjs.ToArray());
|
||||
}
|
||||
public virtual IInsertable<T> Insertable<T>(T insertObj) where T : class, new()
|
||||
{
|
||||
return this.Insertable(new T[] { insertObj });
|
||||
|
Reference in New Issue
Block a user