| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -131,7 +131,7 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 执行:添加列。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (newColumns.IsEmpty()) return TextUtility.Empty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (newColumns.IsEmpty()) return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                foreach (var column in newColumns) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    var type = Declaration(column); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -139,11 +139,13 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    var execute = Execute(sql, null, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (!execute.Success) return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return TextUtility.Empty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var sqlcolumns = new List<string>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var primaryKey = new List<ColumnAttribute>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                foreach (var column in structure.Columns) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 检查 Independent 特性。
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -152,18 +154,59 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    var type = Declaration(column); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (!column.Independent) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (column.PrimaryKey) type = type + " primary key"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (column.Incremental) type += " identity"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (column.PrimaryKey) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            primaryKey.Add(column); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            type += " not null"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (string.IsNullOrEmpty(type)) return TextUtility.Merge("类型 ", column.Type.ToString(), " 不受支持。"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    sqlcolumns.Add(type); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (sqlcolumns.Count < 1) return $"无法对类型 {model.FullName} 创建表:没有定义任何字段。"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var sql = TextUtility.Merge("create table [", table, "](", string.Join(", ", sqlcolumns.ToArray()), "); "); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var execute = Execute(sql, null, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (execute.Success) return TextUtility.Empty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // 无主键时直接建表,有主键时使用事务。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (primaryKey.Count < 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    // 执行建表。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    var sql = TextUtility.Merge("create table [", table, "](", string.Join(", ", sqlcolumns.ToArray()), "); "); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    var execute = Execute(sql, null, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (!execute.Success) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (ThrowAdoException) throw new SqlException(execute.Message); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        else return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return this.InTransaction(() => | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // 执行建表。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        var sql = TextUtility.Merge("create table [", table, "](", string.Join(", ", sqlcolumns.ToArray()), "); "); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        var execute = Execute(sql, null, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (!execute.Success) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (ThrowAdoException) throw new SqlException(execute.Message); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            else return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        // 添加主键。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        var sql_pk_fields = primaryKey.Map(x => $"[{x.Field}]").Join(", "); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        var sql_pk = $"alter table [{table}] add constraint [pk_{table}] primary key clustered ({sql_pk_fields}) "; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        var execute_pk = Execute(sql_pk, null, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if (!execute_pk.Success) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            if (ThrowAdoException) throw new SqlException(execute_pk.Message); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            else return execute_pk.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -204,7 +247,7 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var sql = sb.ToString(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var execute = Execute(sql, ps, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (execute.Success) return TextUtility.Empty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (execute.Success) return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -248,7 +291,7 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var sql = $"update {table} set {string.Join(", ", items.ToArray())} where [{structure.Key.Field}]='{key}'"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var execute = Execute(sql, ps, false); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (execute.Success) return TextUtility.Empty; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (execute.Success) return null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return execute.Message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |