diff --git a/Providers/FreeSql.Provider.Oracle/DataAnnotations/OraclePrimaryKeyNameAttribute.cs b/Providers/FreeSql.Provider.Oracle/DataAnnotations/OraclePrimaryKeyNameAttribute.cs new file mode 100644 index 00000000..fd2aa735 --- /dev/null +++ b/Providers/FreeSql.Provider.Oracle/DataAnnotations/OraclePrimaryKeyNameAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace FreeSql.DataAnnotations +{ + public class OraclePrimaryKeyNameAttribute : Attribute + { + public OraclePrimaryKeyNameAttribute(string name) + { + this.Name = name; + } + + /// + /// 主键名 + /// + public string Name { get; set; } + } +} diff --git a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs index 6f6dbf94..daf4d3f4 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs @@ -8,6 +8,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Linq; +using System.Reflection; using System.Text; using System.Text.RegularExpressions; @@ -90,6 +91,7 @@ namespace FreeSql.Oracle var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名 if (tboldname?.Length == 1) tboldname = new[] { userId, tboldname[0] }; + var primaryKeyName = entityType.GetCustomAttribute()?.Name; if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库 throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}"); @@ -115,7 +117,8 @@ namespace FreeSql.Oracle } if (tb.Primarys.Any()) { - sb.Append(" \r\n CONSTRAINT ").Append(tbname[0]).Append("_").Append(tbname[1]).Append("_pk1 PRIMARY KEY ("); + var pkname = primaryKeyName ?? $"{tbname[0]}_{tbname[1]}_pk1"; + sb.Append(" \r\n CONSTRAINT ").Append(pkname).Append(" PRIMARY KEY ("); foreach (var tbcol in tb.Primarys) sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Remove(sb.Length - 2, 2).Append("),"); } @@ -268,7 +271,8 @@ and a.owner in ({0}) and a.table_name in ({1})", tboldname ?? tbname); } if (tb.Primarys.Any()) { - sb.Append(" \r\n CONSTRAINT ").Append(tbname[0]).Append("_").Append(tbname[1]).Append("_pk2 PRIMARY KEY ("); + var pkname = primaryKeyName ?? $"{tbname[0]}_{tbname[1]}_pk2"; + sb.Append(" \r\n CONSTRAINT ").Append(pkname).Append(" PRIMARY KEY ("); foreach (var tbcol in tb.Primarys) sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Remove(sb.Length - 2, 2).Append("),"); }