Browse Source

SqlClient:建表支持多个主键。

master
王厅 1 week ago
parent
commit
11c9639650
  1. 61
      Apewer.Source/Source/SqlClient.cs
  2. 7
      Apewer/Source/ColumnAttribute.cs

61
Apewer.Source/Source/SqlClient.cs

@ -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;
}

7
Apewer/Source/ColumnAttribute.cs

@ -93,6 +93,13 @@ namespace Apewer.Source
#endregion
/// <summary></summary>
public override string ToString()
{
var primaryKey = PrimaryKey ? ", PrimaryKey" : "";
return $"[ {_field} ] Type = {_type} {Length}{primaryKey}";
}
/// <summary>生成 Json 对象。</summary>
public Json ToJson()
{

Loading…
Cancel
Save