From 21f7027fb194b130b489c4c0c8c659929f879e0f Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 2 Nov 2017 16:08:23 +0800 Subject: [PATCH] Delete BUG with multiple primary keys --- Src/Asp.Net/SqlServerTest/UnitTest/Delete.cs | 14 ++++++++++++++ Src/Asp.Net/SqlServerTest/UnitTest/UnitTestBase.cs | 6 ++++++ .../Abstract/DeleteProvider/DeleteableProvider.cs | 6 +++--- .../Abstract/SqlBuilderProvider/DeleteBuilder.cs | 2 +- Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs | 2 ++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Delete.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Delete.cs index 0243b5596..28c408944 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Delete.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Delete.cs @@ -56,6 +56,20 @@ namespace OrmTest base.Check(@"DELETE FROM [STudent] WHERE id=@id", new List() { new SugarParameter("@id",1) }, t6.Key, t6.Value, "Delte t6 error"); + + var t7 = base.GetInstanceByAttribute().Deleteable().Where(new List() { + new DeleteTestTable() { Id=1, Id2="x" }, + new DeleteTestTable() { Id=2, Id2="x1" } + }).ToSql(); + base.Check("DELETE FROM [DeleteTestTable] WHERE (([Id]=N'1'AND [Id2]=N'x')OR ([Id]=N'2'AND [Id2]=N'x1')) ",null, t7.Key, null, + "Delte t7 error"); } } + + public class DeleteTestTable { + [SugarColumn(IsPrimaryKey =true)] + public int Id { get; set; } + [SugarColumn(IsPrimaryKey = true)] + public string Id2 { get; set; } + } } diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UnitTestBase.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UnitTestBase.cs index 1aeea8b30..899eadaea 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UnitTestBase.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UnitTestBase.cs @@ -51,5 +51,11 @@ namespace OrmTest.UnitTest SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true }); return db; } + + public SqlSugarClient GetInstanceByAttribute() + { + SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { InitKeyType=InitKeyType.Attribute, ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true }); + return db; + } } } \ No newline at end of file diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 0ac437ac1..26a68a642 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -74,7 +74,7 @@ namespace SqlSugar string tableName = this.Context.EntityMaintenance.GetTableName(); var primaryFields = this.GetPrimaryKeys(); var isSinglePrimaryKey = primaryFields.Count == 1; - Check.ArgumentNullException(primaryFields, string.Format("Table {0} with no primarykey", tableName)); + Check.Exception(primaryFields.IsNullOrEmpty(), string.Format("Table {0} with no primarykey", tableName)); if (isSinglePrimaryKey) { List primaryKeyValues = new List(); @@ -106,7 +106,7 @@ namespace SqlSugar { StringBuilder orString = new StringBuilder(); var isFirst = deleteObjs.IndexOf(deleteObj) == 0; - if (isFirst) + if (!isFirst) { orString.Append(DeleteBuilder.WhereInOrTemplate + UtilConstants.Space); } @@ -114,7 +114,7 @@ namespace SqlSugar StringBuilder andString = new StringBuilder(); foreach (var primaryField in primaryFields) { - if (i == 0) + if (i != 0) andString.Append(DeleteBuilder.WhereInAndTemplate + UtilConstants.Space); var entityPropertyName = this.Context.EntityMaintenance.GetPropertyName(primaryField); var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs index bfd9ca868..b26a70528 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/DeleteBuilder.cs @@ -65,7 +65,7 @@ namespace SqlSugar { get { - return "[{0}]=N'{1}'"; + return Builder.SqlTranslationLeft+"{0}"+Builder.SqlTranslationRight+"=N'{1}'"; } } public string WhereInAreaTemplate diff --git a/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs b/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs index 08c987a08..f39a6d777 100644 --- a/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Interface/ISqlBuilder.cs @@ -12,6 +12,8 @@ namespace SqlSugar CommandType CommandType { get; set; } String AppendWhereOrAnd(bool isWhere, string sqlString); string AppendHaving(string sqlString); + string SqlTranslationLeft { get; } + string SqlTranslationRight { get; } SqlQueryBuilder SqlQueryBuilder { get; set; } QueryBuilder QueryBuilder { get; set; } InsertBuilder InsertBuilder { get; set; }