This commit is contained in:
sunkaixuan
2017-05-17 00:22:43 +08:00
22 changed files with 178 additions and 52 deletions

View File

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

View File

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
namespace OrmTest
{
public class Delete : ExpTestBase
public class Delete : UnitTestBase
{
private Delete() { }
public Delete(int eachCount)

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace OrmTest.UnitTest
{
public class Attribute : ExpTestBase
public class Attribute : UnitTestBase
{
public Attribute(int eachCount)
{

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace OrmTest.UnitTest
{
public class AutoClose : ExpTestBase
public class AutoClose : UnitTestBase
{
public AutoClose(int eachCount)
{

View File

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace OrmTest.UnitTest
{
public class MapColumn : ExpTestBase
public class MapColumn : UnitTestBase
{
public SqlSugarClient GetInstance()
{

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace OrmTest.UnitTest
{
public class MapTable : ExpTestBase
public class MapTable : UnitTestBase
{
public void Init()
{

View File

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

View File

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

View File

@@ -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() + "'";
}
}
}
}
}

View File

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

View File

@@ -153,6 +153,7 @@ namespace SqlSugar
insertItem.Add(columnInfo);
}
this.InsertBuilder.DbColumnInfoList.AddRange(insertItem);
++i;
}
}
private string GetDbColumnName(string entityName)

View File

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

View File

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