diff --git a/XCode/DataAccessLayer/MetaData/IMetaData.cs b/XCode/DataAccessLayer/MetaData/IMetaData.cs index f51b658c5..deed5ec47 100644 --- a/XCode/DataAccessLayer/MetaData/IMetaData.cs +++ b/XCode/DataAccessLayer/MetaData/IMetaData.cs @@ -1,50 +1,47 @@ -using System; -using System.Collections.Generic; -using NewLife; +using NewLife; -namespace XCode.DataAccessLayer +namespace XCode.DataAccessLayer; + +/// 数据库元数据接口 +public interface IMetaData : IDisposable2 { - /// 数据库元数据接口 - public interface IMetaData : IDisposable2 - { - #region 属性 - /// 数据库 - IDatabase Database { get; } - - /// 所有元数据集合 - ICollection MetaDataCollections { get; } - - /// 保留关键字 - ICollection ReservedWords { get; } - #endregion - - #region 构架 - /// 取得表模型,正向工程 - /// - IList GetTables(); - - /// - /// 取得所有表名 - /// - /// - IList GetTableNames(); - - /// 设置表模型,检查数据表是否匹配表模型,反向工程 - /// 设置 - /// - void SetTables(Migration setting, params IDataTable[] tables); - - /// 获取数据定义语句 - /// 数据定义模式 - /// 其它信息 - /// 数据定义语句 - String? GetSchemaSQL(DDLSchema schema, params Object?[] values); - - /// 设置数据定义模式 - /// 数据定义模式 - /// 其它信息 - /// - Object? SetSchema(DDLSchema schema, params Object?[] values); - #endregion - } + #region 属性 + /// 数据库 + IDatabase Database { get; } + + /// 所有元数据集合 + ICollection MetaDataCollections { get; } + + /// 保留关键字 + ICollection ReservedWords { get; } + #endregion + + #region 构架 + /// 取得表模型,正向工程 + /// + IList GetTables(); + + /// + /// 取得所有表名 + /// + /// + IList GetTableNames(); + + /// 设置表模型,检查数据表是否匹配表模型,反向工程 + /// 设置 + /// + void SetTables(Migration setting, params IDataTable[] tables); + + /// 获取数据定义语句 + /// 数据定义模式 + /// 其它信息 + /// 数据定义语句 + String? GetSchemaSQL(DDLSchema schema, params Object?[] values); + + /// 设置数据定义模式 + /// 数据定义模式 + /// 其它信息 + /// + Object? SetSchema(DDLSchema schema, params Object?[] values); + #endregion } \ No newline at end of file diff --git a/XCode/Entity/EntityFactory.cs b/XCode/Entity/EntityFactory.cs index a7f42ac6b..51711823f 100644 --- a/XCode/Entity/EntityFactory.cs +++ b/XCode/Entity/EntityFactory.cs @@ -251,19 +251,23 @@ private static void Init(String connName, IList? types, Boolean throwOnErr // 反向工程检查 if (dal.Db.Migration > Migration.Off) { - //var tables = facts.Select(e => e.Table.DataTable).ToArray(); var tables = new List(); foreach (var item in facts) { + // 带有分表策略的实体类不参与反向工程 + if (item.ShardPolicy != null) continue; + if (item.Table.DataTable.Columns.Any(e => e.DataScale.StartsWithIgnoreCase("shard:", "timeShard:"))) continue; + // 克隆一份,防止修改 var table = item.Table.DataTable; table = (table.Clone() as IDataTable)!; - if (/*table != null &&*/ table.TableName != item.TableName) + if (table.TableName != item.TableName) { // 表名去掉前缀 var name = item.TableName; - if (name.Contains(".")) name = name.Substring("."); + var p = name.IndexOf('.'); + if (p > 0) name = name.Substring(p + 1); table.TableName = name; } @@ -276,10 +280,6 @@ private static void Init(String connName, IList? types, Boolean throwOnErr // 实体类初始化数据 foreach (var item in facts) { - //if (item.Default is EntityBase entity) - //{ - // entity.InitData(); - //} item.Session.InitData(); if (span != null) span.Value++;