diff --git a/Src/Asp.Net/MySqlTest/Demos/5_CodeFirst.cs b/Src/Asp.Net/MySqlTest/Demos/5_CodeFirst.cs index 2813aac9e..e658b4bfe 100644 --- a/Src/Asp.Net/MySqlTest/Demos/5_CodeFirst.cs +++ b/Src/Asp.Net/MySqlTest/Demos/5_CodeFirst.cs @@ -31,6 +31,15 @@ namespace OrmTest.Demo [SugarColumn(IsIgnore =true)] public string TestId { get; set; } } + public class CodeTable3 + { + [SugarColumn(IsPrimaryKey = true)] + public int Id { get; set; } + [SugarColumn(IsPrimaryKey = true)] + public string Name { get; set; } + [SugarColumn(IsIgnore = true)] + public string TestId { get; set; } + } public class CodeFirst : DemoBase { public static void Init() @@ -47,7 +56,7 @@ namespace OrmTest.Demo //db.CodeFirst.BackupTable().InitTables(typeof(CodeTable),typeof(CodeTable2)); //No backup table - db.CodeFirst.InitTables(typeof(CodeTable),typeof(CodeTable2)); + db.CodeFirst.InitTables(typeof(CodeTable),typeof(CodeTable2),typeof(CodeTable3)); } } } diff --git a/Src/Asp.Net/SqlServerTest/Demos/5_CodeFirst.cs b/Src/Asp.Net/SqlServerTest/Demos/5_CodeFirst.cs index de002e3fe..255962e71 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/5_CodeFirst.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/5_CodeFirst.cs @@ -34,6 +34,15 @@ namespace OrmTest.Demo [SugarColumn(IsIgnore =true)] public string TestId { get; set; } } + public class CodeTable3 + { + [SugarColumn(IsPrimaryKey =true)] + public int Id { get; set; } + [SugarColumn(IsPrimaryKey = true)] + public string Name { get; set; } + [SugarColumn(IsIgnore = true)] + public string TestId { get; set; } + } public class CodeFirst : DemoBase { public static void Init() @@ -51,6 +60,9 @@ namespace OrmTest.Demo //No backup table db.CodeFirst.SetStringDefaultLength(10).InitTables(typeof(CodeTable),typeof(CodeTable2)); + + + db.CodeFirst.InitTables(typeof(CodeTable3)); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 4333eed93..a177abcf9 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -94,7 +94,7 @@ namespace SqlSugar public virtual void NoExistLogic(EntityInfo entityInfo) { var tableName = GetTableName(entityInfo); - Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); + //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); if (entityInfo.Columns.HasValue()) { @@ -110,7 +110,7 @@ namespace SqlSugar { if (entityInfo.Columns.HasValue()) { - Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); + //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Multiple primary keys do not support modifications"); var tableName = GetTableName(entityInfo); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index d63236665..29cf211d6 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -140,6 +140,15 @@ namespace SqlSugar this.Context.Ado.ExecuteCommand(sql); return true; } + + public bool AddPrimaryKeys(string tableName, string[] columnNames) + { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); + var columnName = string.Join(",", columnNames); + string sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", this.SqlBuilder.GetNoTranslationColumnName(columnNames.First()), this.SqlBuilder.GetNoTranslationColumnName(columnNames.First())), columnName); + this.Context.Ado.ExecuteCommand(sql); + return true; + } public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo) { tableName = this.SqlBuilder.GetTranslationTableName(tableName); diff --git a/Src/Asp.Net/SqlSugar/Interface/IDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Interface/IDbMaintenance.cs index 8b2be617a..c693304f6 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IDbMaintenance.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IDbMaintenance.cs @@ -32,6 +32,7 @@ namespace SqlSugar bool AddColumn(string tableName, DbColumnInfo column); bool UpdateColumn(string tableName, DbColumnInfo column); bool AddPrimaryKey(string tableName,string columnName); + bool AddPrimaryKeys(string tableName, string [] columnNames); bool DropConstraint(string tableName, string constraintName); bool BackupDataBase(string databaseName,string fullFileName); bool BackupTable(string oldTableName, string newTableName, int maxBackupDataRows = int.MaxValue); diff --git a/Src/Asp.Net/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs b/Src/Asp.Net/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs index 45b935772..1de23e6bb 100644 --- a/Src/Asp.Net/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs +++ b/Src/Asp.Net/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs @@ -10,7 +10,7 @@ namespace SqlSugar public override void NoExistLogic(EntityInfo entityInfo) { var tableName = GetTableName(entityInfo); - Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); + //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); if (entityInfo.Columns.HasValue()) { diff --git a/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs index 35dc37d10..e51a343e9 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs @@ -282,9 +282,16 @@ namespace SqlSugar if (isCreatePrimaryKey) { var pkColumns = columns.Where(it => it.IsPrimarykey).ToList(); - foreach (var item in pkColumns) + if (pkColumns.Count > 1) { - this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); + this.Context.DbMaintenance.AddPrimaryKeys(tableName, pkColumns.Select(it=>it.DbColumnName).ToArray()); + } + else + { + foreach (var item in pkColumns) + { + this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); + } } } return true; diff --git a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite index 6f554cf1f..66f06136b 100644 Binary files a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite and b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite differ