From e6da77cce38eb4c6550c9a0375c377f03c954b53 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 18 May 2017 12:51:40 +0800 Subject: [PATCH] - --- .../DeleteProvider/DeleteableProvider.cs | 128 ++++++++++-------- .../InsertableProvider/InsertableProvider.cs | 44 ++++-- 2 files changed, 101 insertions(+), 71 deletions(-) diff --git a/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 4d4e41de7..6ac6ca9b1 100644 --- a/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -13,6 +13,13 @@ namespace SqlSugar public IDb Db { get { return Context.Database; } } public ISqlBuilder SqlBuilder { get; set; } public DeleteBuilder DeleteBuilder { get; set; } + public EntityInfo EntityInfo + { + get + { + return this.Context.EntityProvider.GetEntityInfo(); + } + } public int ExecuteCommand() { string sql = DeleteBuilder.ToSqlString(); @@ -28,58 +35,50 @@ namespace SqlSugar return this; } string tableName = this.Context.EntityProvider.GetTableName(); - var entityInfo = this.Context.EntityProvider.GetEntityInfo(); - if (this.Context.IsSystemTablesConfig) + var primaryFields = this.GetPrimaryKeys(); + var isSinglePrimaryKey = primaryFields.Count == 1; + Check.ArgumentNullException(primaryFields, string.Format("Table {0} with no primarykey", tableName)); + if (isSinglePrimaryKey) { - var primaryFields = this.Db.DbMaintenance.GetPrimaries(tableName).ToArray(); - var isSinglePrimaryKey = primaryFields.Length == 1; - Check.ArgumentNullException(primaryFields, string.Format("Table {0} with no primarykey", tableName)); - if (isSinglePrimaryKey) + List primaryKeyValues = new List(); + var primaryField = primaryFields.Single(); + foreach (var deleteObj in deleteObjs) { - List primaryKeyValues = new List(); - var primaryField = primaryFields.Single(); - foreach (var deleteObj in deleteObjs) - { - var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); - var columnInfo = entityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); - var value = columnInfo.PropertyInfo.GetValue(deleteObj, null); - primaryKeyValues.Add(value); - } - var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals(); - Where(string.Format(DeleteBuilder.WhereInTemplate, primaryFields.Single(), inValueString)); - } - else - { - StringBuilder whereInSql = new StringBuilder(); - foreach (var deleteObj in deleteObjs) - { - StringBuilder orString = new StringBuilder(); - var isFirst = deleteObjs.IndexOf(deleteObj) == 0; - if (isFirst) - { - orString.Append(DeleteBuilder.WhereInOrTemplate + PubConst.Space); - } - int i = 0; - StringBuilder andString = new StringBuilder(); - foreach (var primaryField in primaryFields) - { - if (i == 0) - andString.Append(DeleteBuilder.WhereInAndTemplate + PubConst.Space); - var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); - var columnInfo = entityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); - var entityValue = columnInfo.PropertyInfo.GetValue(deleteObj, null); - andString.AppendFormat(DeleteBuilder.WhereInEqualTemplate, primaryField, entityValue); - ++i; - } - orString.AppendFormat(DeleteBuilder.WhereInAreaTemplate, andString); - whereInSql.Append(orString); - } - Where(string.Format(DeleteBuilder.WhereInAreaTemplate, whereInSql.ToString())); + var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); + var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); + var value = columnInfo.PropertyInfo.GetValue(deleteObj, null); + primaryKeyValues.Add(value); } + var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals(); + Where(string.Format(DeleteBuilder.WhereInTemplate, primaryFields.Single(), inValueString)); } else { - + StringBuilder whereInSql = new StringBuilder(); + foreach (var deleteObj in deleteObjs) + { + StringBuilder orString = new StringBuilder(); + var isFirst = deleteObjs.IndexOf(deleteObj) == 0; + if (isFirst) + { + orString.Append(DeleteBuilder.WhereInOrTemplate + PubConst.Space); + } + int i = 0; + StringBuilder andString = new StringBuilder(); + foreach (var primaryField in primaryFields) + { + if (i == 0) + andString.Append(DeleteBuilder.WhereInAndTemplate + PubConst.Space); + var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); + var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); + var entityValue = columnInfo.PropertyInfo.GetValue(deleteObj, null); + andString.AppendFormat(DeleteBuilder.WhereInEqualTemplate, primaryField, entityValue); + ++i; + } + orString.AppendFormat(DeleteBuilder.WhereInAreaTemplate, andString); + whereInSql.Append(orString); + } + Where(string.Format(DeleteBuilder.WhereInAreaTemplate, whereInSql.ToString())); } return this; } @@ -124,16 +123,9 @@ namespace SqlSugar } string tableName = this.Context.EntityProvider.GetTableName(); string primaryField = null; - if (this.Context.IsSystemTablesConfig) - { - primaryField = this.Db.DbMaintenance.GetPrimaries(tableName).FirstOrDefault(); - Check.ArgumentNullException(primaryField, "Table " + tableName + " with no primarykey"); - Where(string.Format(DeleteBuilder.WhereInTemplate, primaryField, primaryKeyValues.ToJoinSqlInVals())); - } - else - { - - } + primaryField = GetPrimaryKeys().FirstOrDefault(); + Check.ArgumentNullException(primaryField, "Table " + tableName + " with no primarykey"); + Where(string.Format(DeleteBuilder.WhereInTemplate, primaryField, primaryKeyValues.ToJoinSqlInVals())); return this; } @@ -156,5 +148,29 @@ namespace SqlSugar var paramters = DeleteBuilder.Parameters == null ? null : DeleteBuilder.Parameters.ToList(); return new KeyValuePair>(sql, paramters); } + + + private List GetPrimaryKeys() + { + if (this.Context.IsSystemTablesConfig) + { + return this.Context.Database.DbMaintenance.GetPrimaries(this.EntityInfo.DbTableName); + } + else + { + return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); + } + } + private List GetIdentityKeys() + { + if (this.Context.IsSystemTablesConfig) + { + return this.Context.Database.DbMaintenance.GetIsIdentities(this.EntityInfo.DbTableName); + } + else + { + return this.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.DbColumnName).ToList(); + } + } } } diff --git a/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index e59a18947..63f3c932d 100644 --- a/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -55,7 +55,7 @@ namespace SqlSugar } public IInsertable IgnoreColumns(Func ignoreColumMethod) { - this.InsertBuilder.DbColumnInfoList =this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumMethod(it.EntityPropertyName)).ToList(); + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumMethod(it.EntityPropertyName)).ToList(); return this; } @@ -72,7 +72,7 @@ namespace SqlSugar return this; } - public IInsertable Where(bool isInsertNull,bool isOffIdentity=false) + public IInsertable Where(bool isInsertNull, bool isOffIdentity = false) { this.IsOffIdentity = IsOffIdentity; if (this.InsertBuilder.LambdaExpressions == null) @@ -88,20 +88,13 @@ namespace SqlSugar #region Identities if (!IsOffIdentity) { - if (this.Context.IsSystemTablesConfig) + List identities = GetIdentityKeys(); + if (identities != null && identities.Any()) { - List identities = Db.DbMaintenance.GetIsIdentities(this.InsertBuilder.TableName); - if (identities != null && identities.Any()) + this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => { - this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => - { - return !identities.Any(i => it.ColumnName.Equals(i, StringComparison.CurrentCultureIgnoreCase)); - }).ToList(); - } - } - else - { - + return !identities.Any(i => it.ColumnName.Equals(i, StringComparison.CurrentCultureIgnoreCase)); + }).ToList(); } } #endregion @@ -177,7 +170,28 @@ namespace SqlSugar } } - + private List GetPrimaryKeys() + { + if (this.Context.IsSystemTablesConfig) + { + return this.Context.Database.DbMaintenance.GetPrimaries(this.EntityInfo.DbTableName); + } + else + { + return this.EntityInfo.Columns.Where(it => it.IsPrimarykey).Select(it => it.DbColumnName).ToList(); + } + } + private List GetIdentityKeys() + { + if (this.Context.IsSystemTablesConfig) + { + return this.Context.Database.DbMaintenance.GetIsIdentities(this.EntityInfo.DbTableName); + } + else + { + return this.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.DbColumnName).ToList(); + } + } #endregion } }