This commit is contained in:
sunkaixuan
2017-05-01 13:16:20 +08:00
parent ec6bd36b41
commit 8ef15c0697
8 changed files with 106 additions and 29 deletions

View File

@@ -18,14 +18,14 @@ namespace OrmTest
static void Main(string[] args) static void Main(string[] args)
{ {
//Unit Test //Unit Test
new Field(1).Init(); //new Field(1).Init();
new Where(1).Init(); //new Where(1).Init();
new Method(1).Init(); //new Method(1).Init();
new JoinQuery(1).Init(); //new JoinQuery(1).Init();
new SingleQuery(1).Init(); //new SingleQuery(1).Init();
new SelectQuery(1).Init(); //new SelectQuery(1).Init();
new AutoClose(1).Init(); //new AutoClose(1).Init();
new Insert(1).Init();
//Performance Test //Performance Test
//new SqlSugarPerformance(100).Select(); //new SqlSugarPerformance(100).Select();
} }

View File

@@ -21,8 +21,7 @@ namespace OrmTest.UnitTest
var insertObj = new Student() { Name="jack",CreateTime=DateTime.Now }; var insertObj = new Student() { Name="jack",CreateTime=DateTime.Now };
var insertObjs = new List<Student>() { insertObj }.ToArray(); var insertObjs = new List<Student>() { insertObj }.ToArray();
//Insert reutrn identity var s1= db.Insertable<Student>(insertObj).ToSql();
db.Insertable<Student>(insertObj).ExecuteReutrnIdentity();
//Insert reutrn Command Count //Insert reutrn Command Count
db.Insertable<Student>(insertObj).ExecuteCommand(); db.Insertable<Student>(insertObj).ExecuteCommand();

View File

@@ -11,7 +11,7 @@ namespace SqlSugar
public SqlSugarClient Context { get; set; } public SqlSugarClient Context { get; set; }
public EntityInfo GetEntityInfo<T>()where T:class,new() public EntityInfo GetEntityInfo<T>()where T:class,new()
{ {
string cacheKey = "GetEntityInfo"; string cacheKey = "GetEntityInfo"+typeof(T).FullName;
return CacheFactory.Func<EntityInfo>(cacheKey, return CacheFactory.Func<EntityInfo>(cacheKey,
(cm, key) => (cm, key) =>
{ {
@@ -27,9 +27,10 @@ namespace SqlSugar
result.Columns = new List<EntityColumnInfo>(); result.Columns = new List<EntityColumnInfo>();
foreach (var item in result.Type.GetProperties()) foreach (var item in result.Type.GetProperties())
{ {
EntityColumnInfo columns = new EntityColumnInfo(); EntityColumnInfo column = new EntityColumnInfo();
columns.ColumnName = item.Name; column.EntityName = item.Name;
columns.PropertyInfo = item; column.PropertyInfo = item;
result.Columns.Add(column);
} }
return result; return result;
}); });

View File

@@ -8,6 +8,7 @@ namespace SqlSugar
{ {
public InsertBuilder() { public InsertBuilder() {
this.sql = new StringBuilder(); this.sql = new StringBuilder();
this.DbColumnInfoList = new List<DbColumnInfo>();
} }
public SqlSugarClient Context { get; set; } public SqlSugarClient Context { get; set; }
public ILambdaExpressions LambdaExpressions { get; set; } public ILambdaExpressions LambdaExpressions { get; set; }
@@ -16,7 +17,8 @@ namespace SqlSugar
public List<SugarParameter> Parameters { get; set; } public List<SugarParameter> Parameters { get; set; }
public string EntityName { get; set; } public string EntityName { get; set; }
public string TableWithString { get; set; } public string TableWithString { get; set; }
public List<string> ColumNames{ get; set; } public List<DbColumnInfo> DbColumnInfoList { get; set; }
public bool IsInsertNull { get; set; }
public virtual string SqlTemplate public virtual string SqlTemplate
{ {
@@ -49,9 +51,9 @@ namespace SqlSugar
public virtual string ToSqlString() public virtual string ToSqlString()
{ {
string columnsString =string.Join("," ,this.ColumNames.Select(it => Builder.GetTranslationColumnName(it))); string columnsString =string.Join("," ,this.DbColumnInfoList.Select(it => Builder.GetTranslationColumnName(it.ColumnName)));
string columnParametersString = string.Join(",", this.ColumNames.Select(it =>Builder.SqlParameterKeyWord+it)); string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it =>Builder.SqlParameterKeyWord+it.ColumnName));
return string.Format(this.sql.ToString(),columnsString, columnParametersString); return string.Format(SqlTemplate,GetTableNameString,columnsString, columnParametersString);
} }
} }
} }

View File

@@ -9,28 +9,36 @@ namespace SqlSugar
{ {
public class InsertableProvider<T> : IInsertable<T> where T : class, new() public class InsertableProvider<T> : IInsertable<T> where T : class, new()
{ {
public SqlSugarClient Context { get; set; } public SqlSugarClient Context { get; set; }
public bool IsMappingTable { get { return this.Context.MappingTables != null && this.Context.MappingTables.Any(); } }
public bool IsMappingColumns { get { return this.Context.MappingColumns != null && this.Context.MappingColumns.Any(); } }
public IDb Db { get { return Context.Database; } } public IDb Db { get { return Context.Database; } }
public ISqlBuilder SqlBuilder { get; set; } public ISqlBuilder SqlBuilder { get; set; }
public InsertBuilder InsertBuilder { get { return this.InsertBuilder; } } public InsertBuilder InsertBuilder { get; set; }
public bool IsMappingTable { get { return this.Context.MappingTables != null && this.Context.MappingTables.Any(); } }
public bool IsMappingColumns { get { return this.Context.MappingColumns != null && this.Context.MappingColumns.Any(); } }
public bool IsSingle { get { return this.InsertObjs.Length == 1; } }
public EntityInfo EntityInfo { get; set; } public EntityInfo EntityInfo { get; set; }
private List<string> IgnoreColumnList { get; set; } public List<MappingColumn> MappingColumnList { get; set; }
private List<string> InsertColumList { get; set; } private List<string> IgnoreColumnNameList { get; set; }
public T[] InsertObjs { get; set; } public T[] InsertObjs { get; set; }
public int ExecuteCommand() public int ExecuteCommand()
{ {
PreToSql();
return Db.ExecuteCommand(InsertBuilder.ToSqlString(), InsertBuilder.Parameters); return Db.ExecuteCommand(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
} }
public KeyValuePair<string, List<SugarParameter>> ToSql() public KeyValuePair<string, List<SugarParameter>> ToSql()
{ {
PreToSql();
string sql = InsertBuilder.ToSqlString(); string sql = InsertBuilder.ToSqlString();
return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters); return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters);
} }
public int ExecuteReutrnIdentity() public int ExecuteReutrnIdentity()
{ {
PreToSql();
return Db.GetInt(InsertBuilder.ToSqlString(), InsertBuilder.Parameters); return Db.GetInt(InsertBuilder.ToSqlString(), InsertBuilder.Parameters);
} }
@@ -46,12 +54,78 @@ namespace SqlSugar
public IInsertable<T> With(string lockString) public IInsertable<T> With(string lockString)
{ {
this.InsertBuilder.TableWithString = lockString;
return this; return this;
} }
public IInsertable<T> Where(bool isInsertNull) public IInsertable<T> Where(bool isInsertNull)
{ {
this.InsertBuilder.IsInsertNull = isInsertNull;
return this; return this;
} }
#region Private Methods
private void PreToSql()
{
if (this.IsSingle)
{
foreach (var item in this.InsertBuilder.DbColumnInfoList)
{
if (this.InsertBuilder.Parameters == null) this.InsertBuilder.Parameters = new List<SugarParameter>();
this.InsertBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord+item.ColumnName,item.Value));
}
}
}
public void Init()
{
this.InsertBuilder.EntityName = EntityInfo.Name;
if (IsMappingTable)
{
var mappingInfo = this.Context.MappingTables.SingleOrDefault(it => it.EntityName == EntityInfo.Name);
if (mappingInfo != null)
{
this.InsertBuilder.EntityName = mappingInfo.DbTableName;
}
}
Check.Exception(InsertObjs == null || InsertObjs.Count() == 0, "InsertObjs is null");
int i = 0;
foreach (var item in InsertObjs)
{
List<DbColumnInfo> insertItem = new List<DbColumnInfo>();
foreach (var column in EntityInfo.Columns)
{
var columnInfo = new DbColumnInfo()
{
Value = column.PropertyInfo.GetValue(item),
ColumnName = GetDbColumnName(column.EntityName),
EntityPropertyName = column.EntityName,
TableId=i
};
insertItem.Add(columnInfo);
}
this.InsertBuilder.DbColumnInfoList.AddRange(insertItem);
}
}
private string GetDbColumnName(string entityName)
{
if (!IsMappingColumns)
{
return entityName;
}
if (this.Context.MappingColumns.Any(it => it.EntityName == EntityInfo.Name))
{
this.MappingColumnList = this.Context.MappingColumns.Where(it => it.EntityName == EntityInfo.Name).ToList();
}
if (MappingColumnList == null || !MappingColumnList.Any())
{
return entityName;
}
else
{
var mappInfo = this.Context.MappingColumns.Single(it => it.EntityPropertyName == entityName);
return mappInfo == null ? entityName : mappInfo.DbColumnName;
}
}
#endregion
} }
} }

View File

@@ -9,6 +9,7 @@ namespace SqlSugar
public string TableName { get; set; } public string TableName { get; set; }
public int TableId { get; set; } public int TableId { get; set; }
public string ColumnName { get; set; } public string ColumnName { get; set; }
public string EntityPropertyName { get; set; }
public string DataType { get; set; } public string DataType { get; set; }
public int Length { get; set; } public int Length { get; set; }
public string ColumnDescription { get; set; } public string ColumnDescription { get; set; }
@@ -16,5 +17,6 @@ namespace SqlSugar
public bool IsNullable { get; set; } public bool IsNullable { get; set; }
public bool IsIdentity { get; set; } public bool IsIdentity { get; set; }
public bool IsPrimarykey { get; set; } public bool IsPrimarykey { get; set; }
public object Value { get; set; }
} }
} }

View File

@@ -11,7 +11,6 @@ namespace SqlSugar
{ {
public PropertyInfo PropertyInfo { get; set; } public PropertyInfo PropertyInfo { get; set; }
public string EntityName { get; set; } public string EntityName { get; set; }
public string ColumnName { get; set; }
public int Length { get; set; } public int Length { get; set; }
public string ColumnDescription { get; set; } public string ColumnDescription { get; set; }
public string DefaultValue { get; set; } public string DefaultValue { get; set; }

View File

@@ -236,11 +236,11 @@ namespace SqlSugar
var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ; var sqlBuilder = InstanceFactory.GetSqlbuilder(base.CurrentConnectionConfig); ;
reval.SqlBuilder = sqlBuilder; reval.SqlBuilder = sqlBuilder;
reval.InsertObjs = insertObjs; reval.InsertObjs = insertObjs;
reval.SqlBuilder.InsertBuilder = InstanceFactory.GetInsertBuilder(base.CurrentConnectionConfig); sqlBuilder.InsertBuilder =reval.InsertBuilder = InstanceFactory.GetInsertBuilder(base.CurrentConnectionConfig);
reval.SqlBuilder.InsertBuilder.Builder = sqlBuilder; sqlBuilder.InsertBuilder.Builder = sqlBuilder;
reval.SqlBuilder.Context = reval.SqlBuilder.QueryBuilder.Context = this; sqlBuilder.Context = reval.SqlBuilder.InsertBuilder.Context = this;
reval.SqlBuilder.InsertBuilder.EntityName = typeof(T).Name; sqlBuilder.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig);
reval.SqlBuilder.InsertBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig); reval.Init();
return reval; return reval;
} }