|
|
@ -131,7 +131,7 @@ namespace Apewer.Source |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 执行:添加列。
|
|
|
// 执行:添加列。
|
|
|
if (newColumns.IsEmpty()) return TextUtility.Empty; |
|
|
if (newColumns.IsEmpty()) return null; |
|
|
foreach (var column in newColumns) |
|
|
foreach (var column in newColumns) |
|
|
{ |
|
|
{ |
|
|
var type = Declaration(column); |
|
|
var type = Declaration(column); |
|
|
@ -139,11 +139,13 @@ namespace Apewer.Source |
|
|
var execute = Execute(sql, null, false); |
|
|
var execute = Execute(sql, null, false); |
|
|
if (!execute.Success) return execute.Message; |
|
|
if (!execute.Success) return execute.Message; |
|
|
} |
|
|
} |
|
|
return TextUtility.Empty; |
|
|
|
|
|
|
|
|
return null; |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
var sqlcolumns = new List<string>(); |
|
|
var sqlcolumns = new List<string>(); |
|
|
|
|
|
var primaryKey = new List<ColumnAttribute>(); |
|
|
foreach (var column in structure.Columns) |
|
|
foreach (var column in structure.Columns) |
|
|
{ |
|
|
{ |
|
|
// 检查 Independent 特性。
|
|
|
// 检查 Independent 特性。
|
|
|
@ -152,18 +154,59 @@ namespace Apewer.Source |
|
|
var type = Declaration(column); |
|
|
var type = Declaration(column); |
|
|
if (!column.Independent) |
|
|
if (!column.Independent) |
|
|
{ |
|
|
{ |
|
|
if (column.PrimaryKey) type = type + " primary key"; |
|
|
|
|
|
if (column.Incremental) type += " identity"; |
|
|
if (column.Incremental) type += " identity"; |
|
|
|
|
|
if (column.PrimaryKey) |
|
|
|
|
|
{ |
|
|
|
|
|
primaryKey.Add(column); |
|
|
|
|
|
type += " not null"; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(type)) return TextUtility.Merge("类型 ", column.Type.ToString(), " 不受支持。"); |
|
|
if (string.IsNullOrEmpty(type)) return TextUtility.Merge("类型 ", column.Type.ToString(), " 不受支持。"); |
|
|
sqlcolumns.Add(type); |
|
|
sqlcolumns.Add(type); |
|
|
} |
|
|
} |
|
|
if (sqlcolumns.Count < 1) return $"无法对类型 {model.FullName} 创建表:没有定义任何字段。"; |
|
|
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; |
|
|
if (primaryKey.Count < 1) |
|
|
return execute.Message; |
|
|
{ |
|
|
|
|
|
// 执行建表。
|
|
|
|
|
|
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 sql = sb.ToString(); |
|
|
|
|
|
|
|
|
var execute = Execute(sql, ps, false); |
|
|
var execute = Execute(sql, ps, false); |
|
|
if (execute.Success) return TextUtility.Empty; |
|
|
if (execute.Success) return null; |
|
|
return execute.Message; |
|
|
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 sql = $"update {table} set {string.Join(", ", items.ToArray())} where [{structure.Key.Field}]='{key}'"; |
|
|
|
|
|
|
|
|
var execute = Execute(sql, ps, false); |
|
|
var execute = Execute(sql, ps, false); |
|
|
if (execute.Success) return TextUtility.Empty; |
|
|
if (execute.Success) return null; |
|
|
return execute.Message; |
|
|
return execute.Message; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|