/// <summary> /// 检测关系 /// </summary> /// <param name="dbInfo">数据库</param> /// <param name="table">要检测的表</param> /// <returns></returns> private static void CheckRelation(List <string> lstSql, DBInfo dbInfo, KeyWordTableParamItem table) { List <TableRelationAttribute> lstRelation = dbInfo.DBStructure.GetRelation(dbInfo.DefaultOperate, dbInfo, new string[] { table.TableName }); if (lstRelation == null) { return; } foreach (TableRelationAttribute item in table.RelationItems) { bool exists = false; foreach (TableRelationAttribute existsItem in lstRelation) { if (item.SourceName.Equals(existsItem.SourceName, StringComparison.CurrentCultureIgnoreCase)) { exists = true; break; } } if (!exists) { dbInfo.DBStructure.OnCheckEvent(table, dbInfo, CheckEvent.RelationBeginCheck, lstSql); item.CreateName(); BQLQuery bql = BQL.AlterTable(table.TableName).AddForeignkey(item); AbsCondition con = BQLKeyWordManager.ToCondition(bql, dbInfo, null, true); lstSql.Add(con.GetSql(false)); dbInfo.DBStructure.OnCheckEvent(table, dbInfo, CheckEvent.RelationChecked, lstSql); } } }
/// <summary> /// 当前表到表信息的转换 /// </summary> /// <returns></returns> public KeyWordTableParamItem ToTableInfo() { KeyWordTableParamItem table = new KeyWordTableParamItem(_belongTable.Name, null); table.Description = _belongTable.Description; table.IsView = _belongTable.IsView; table.Params = _belongTable.Params; table.RelationItems = _belongTable.RelationItems; return(table); }
/// <summary> /// 当前表到表信息的转换 /// </summary> /// <returns></returns> public KeyWordTableParamItem ToTableInfo() { KeyWordTableParamItem table = new KeyWordTableParamItem(TableName, null); table.Description = Summary; table.IsView = false; FillParams(table); FillRelation(table); return(table); }
/// <summary> /// 获取创建注释的SQL /// </summary> /// <param name="table">表</param> /// <param name="paramName">字段(如果为空则给表设置注释)</param> /// <param name="description">注释</param> /// <returns></returns> public string GetAddDescriptionSQL(KeyWordTableParamItem table, EntityParam pInfo, DBInfo info) { string description = pInfo == null ? table.Description : pInfo.Description; string descriptionValue = DataAccessCommon.FormatValue(description, DbType.AnsiString, info); if (pInfo == null) { return("comment on table " + FormatTableName(table.TableName) + " is " + descriptionValue); } return("comment on column " + FormatTableName(table.TableName) + "." + FormatParam(pInfo.ParamName) + " is " + descriptionValue); }
/// <summary> /// 获取创建注释的SQL /// </summary> /// <param name="table">表</param> /// <param name="paramName">字段(如果为空则给表设置注释)</param> /// <param name="description">注释</param> /// <returns></returns> public string GetAddDescriptionSQL(KeyWordTableParamItem table, EntityParam pInfo, DBInfo info) { string tableValue = DataAccessCommon.FormatValue(table.TableName, DbType.AnsiString, info); string description = pInfo == null ? table.Description : pInfo.Description; string descriptionValue = DataAccessCommon.FormatValue(description, DbType.AnsiString, info); if (pInfo == null) { return("EXECUTE sp_addextendedproperty N'MS_Description', N" + descriptionValue + ", N'SCHEMA', N'dbo', N'TABLE', N" + tableValue + ", NULL, NULL"); } return("EXECUTE sp_addextendedproperty N'MS_Description', N" + descriptionValue + ", N'SCHEMA', N'dbo', N'TABLE', N" + tableValue + ", N'COLUMN', N'" + pInfo.ParamName + "'"); }
/// <summary> /// 获取创建注释的SQL /// </summary> /// <param name="table">表</param> /// <param name="paramName">字段(如果为空则给表设置注释)</param> /// <param name="description">注释</param> /// <returns></returns> public string GetAddDescriptionSQL(KeyWordTableParamItem table, EntityParam pInfo, DBInfo info) { string tableValue = DataAccessCommon.FormatValue(table.TableName, DbType.AnsiString, info); string description = pInfo == null ? table.Description : pInfo.Description; string descriptionValue = DataAccessCommon.FormatValue(description, DbType.AnsiString, info); if (pInfo == null) { return("COMMENT ON TABLE " + FormatTableName(table.TableName) + " IS " + descriptionValue); } return("COMMENT ON COLUMN " + FormatTableName(table.TableName) + "." + FormatParam(pInfo.ParamName) + " IS " + descriptionValue); }
/// <summary> /// 获取创建注释的SQL /// </summary> /// <param name="table">表</param> /// <param name="paramName">字段(如果为空则给表设置注释)</param> /// <param name="description">注释</param> /// <returns></returns> public string GetAddDescriptionSQL(KeyWordTableParamItem table, EntityParam pInfo, DBInfo info) { //string description = pInfo == null ? table.Description : pInfo.Description; //string descriptionValue = DataAccessCommon.FormatValue(description, DbType.AnsiString, info); //if (pInfo == null) //{ // return "alter table " + FormatTableName(table.TableName) + " comment " + descriptionValue; //} //string dbType=DBTypeToSQL(pInfo.SqlType, pInfo.Length); //return "alter table " + FormatTableName(table.TableName) + " modify column " + FormatParam(pInfo.ParamName) + " " + dbType + " comment " + descriptionValue; return(""); }
/// <summary> /// 填充关系 /// </summary> /// <param name="tableInfo">表信息</param> /// <param name="entityInfo">实体信息</param> private static void FillRelation(KeyWordTableParamItem tableInfo, EntityInfoHandle entityInfo) { List <TableRelationAttribute> trs = new List <TableRelationAttribute>(); foreach (EntityMappingInfo info in entityInfo.MappingInfo) { TableRelationAttribute tableAttr = info.MappingInfo; if (!tableAttr.IsParent || tableAttr.IsToDB) { continue; } trs.Add(tableAttr); } tableInfo.RelationItems = trs; }
/// <summary> /// 填充关系信息 /// </summary> /// <param name="table"></param> private void FillRelation(KeyWordTableParamItem table) { table.RelationItems = new List <TableRelationAttribute>(); foreach (EntityRelationItem er in ERelation) { if (!er.IsGenerate) { continue; } table.RelationItems.Add(er.GetRelationInfo()); } if (_dbRelations != null) { table.RelationItems.AddRange(_dbRelations); } }
/// <summary> /// 填充字段信息 /// </summary> /// <param name="table"></param> private void FillParams(KeyWordTableParamItem table) { table.Params = new List <EntityParam>(); foreach (EntityParamField field in EParamFields) { if (!field.IsGenerate) { continue; } table.Params.Add(field.ToParamInfo()); } if (_dbParams != null) { table.Params.AddRange(_dbParams); } }
/// <summary> /// 获取类的创建语句 /// </summary> /// <param name="type"></param> private void GetClassSQL() { _lstSql = new List <string>(); List <KeyWordTableParamItem> lstTable = new List <KeyWordTableParamItem>(); DBConfigInfo dbcinfo = FrmDBSetting.GetDBConfigInfo(DesignerInfo, "DataAccess."); DBInfo dbInfo = dbcinfo.CreateDBInfo(); foreach (ClrClass curType in SelectedClass) { EntityConfig entity = new EntityConfig(curType, DesignerInfo); if (string.IsNullOrEmpty(entity.TableName) || !entity.IsTable) { continue; } string typeName = null; Stack <EntityConfig> stkConfig = EntityConfig.GetEntity(entity, DesignerInfo); List <EntityParam> lstParam = new List <EntityParam>(); List <TableRelationAttribute> lstRelation = new List <TableRelationAttribute>(); string lastTableName = null; string lastSummary = null; while (stkConfig.Count > 0) { EntityConfig centity = stkConfig.Pop(); FillParams(centity, lstParam, lstRelation); lastTableName = centity.TableName; lastSummary = centity.Summary; } KeyWordTableParamItem table = new KeyWordTableParamItem(lstParam, lstRelation, lastTableName, null); table.Description = lastSummary; lstTable.Add(table); } try { using (BatchAction ba = dbInfo.DefaultOperate.StarBatchAction()) { _lstSql = TableChecker.CheckTable(dbInfo, lstTable); } } catch (Exception ex) { MessageBox.Show("生成语句失败:" + ex.Message); } ShowSql(); }
/// <summary> /// 填充字段信息 /// </summary> /// <param name="tableInfo">表信息</param> /// <param name="entityInfo">实体信息</param> private static void FillParamInfos(KeyWordTableParamItem tableInfo, EntityInfoHandle entityInfo) { List <EntityParam> prms = new List <EntityParam>(); foreach (EntityPropertyInfo pkInfo in entityInfo.PrimaryProperty) { prms.Add(pkInfo.ParamInfo); } foreach (EntityPropertyInfo pInfo in entityInfo.PropertyInfo) { if (pInfo.IsPrimaryKey) { continue; } prms.Add(pInfo.ParamInfo); } tableInfo.Params = prms; }
public GrneraterBase(DBEntityInfo entity, ClassDesignerInfo info) { _table = entity.ToTableInfo(); _className = entity.ClassName; DesignerInfo = info; _entityBaseTypeName = GetBaseTypeName(entity.BaseType); _entityBaseTypeShortName = GetBaseTypeShortName(entity.BaseType); _entityFileName = entity.FileName; _entityNamespace = entity.EntityNamespace; _baseNamespace = GetBaseTypeNameSpace(entity.BaseType); _BQLEntityNamespace = entity.EntityNamespace + ".BQLEntity"; _businessNamespace = entity.EntityNamespace + ".Business"; _dataAccessNamespace = entity.EntityNamespace + ".DataAccess"; _DBName = entity.CurrentDBConfigInfo.DbName; _dbConfig = entity.CurrentDBConfigInfo; }
/// <summary> /// 合并同名表信息 /// </summary> /// <param name="itemSource"></param> /// <param name="itemTarget"></param> private static void MergeTableInfo(KeyWordTableParamItem itemTarget, KeyWordTableParamItem itemSource) { if (itemSource.Params != null) { if (itemTarget.Params == null) { itemTarget.Params = new List <EntityParam>(); } MergeEntityParam(itemSource.Params, itemTarget.Params); } if (itemSource.RelationItems != null) { if (itemTarget.RelationItems == null) { itemTarget.RelationItems = new List <TableRelationAttribute>(); } MergeRelation(itemSource.RelationItems, itemTarget.RelationItems); } }
/// <summary> /// 去除重复的表 /// </summary> /// <param name="lstTable"></param> /// <returns></returns> private static List <KeyWordTableParamItem> FilterDistinct(List <KeyWordTableParamItem> lstTable) { Dictionary <string, KeyWordTableParamItem> dicTables = new Dictionary <string, KeyWordTableParamItem>(); KeyWordTableParamItem curItem = null; List <KeyWordTableParamItem> lstTables = new List <KeyWordTableParamItem>(lstTable.Count); foreach (KeyWordTableParamItem item in lstTable) { string key = item.TableName.ToLower(); if (dicTables.TryGetValue(key, out curItem)) //如果表已经存在,则合并表里边的字段和关联信息 { MergeTableInfo(curItem, item); } else { lstTables.Add(item); dicTables[key] = item; } } return(lstTables); }
/// <summary> /// 检测表结构 /// </summary> /// <param name="lstSql">需要更新的SQL</param> /// <param name="dbInfo">数据库信息</param> /// <param name="table">要检测的表</param> private static void CheckTableStruct(List <string> lstSql, DBInfo dbInfo, KeyWordTableParamItem table) { string tableName = table.TableName; BQLQuery bql = BQL.Select(BQL.ToTable(tableName)._).From(BQL.ToTable(tableName)); SelectCondition con = BQLKeyWordManager.ToCondition(bql, dbInfo, null, true) as SelectCondition; string sql = dbInfo.CurrentDbAdapter.GetTopSelectSql(con, 1); Dictionary <string, bool> dic = new Dictionary <string, bool>(); using (IDataReader reader = dbInfo.DefaultOperate.Query(sql, new Buffalo.DB.DbCommon.ParamList(), null)) { for (int i = 0; i < reader.FieldCount; i++) { dic[reader.GetName(i).ToLower()] = true; } } StringBuilder sbSql = new StringBuilder(); string desSQL = null; IDBAdapter idb = dbInfo.CurrentDbAdapter; foreach (EntityParam pInfo in table.Params) { if (!dic.ContainsKey(pInfo.ParamName.ToLower())) { dbInfo.DBStructure.OnCheckEvent(pInfo, dbInfo, CheckEvent.TablenBeginCheck, lstSql); bql = BQL.AlterTable(tableName).AddParam(pInfo); AbsCondition acon = BQLKeyWordManager.ToCondition(bql, dbInfo, null, true); lstSql.Add(acon.GetSql(false)); if (!string.IsNullOrEmpty(pInfo.Description))//添加注释 { desSQL = idb.GetAddDescriptionSQL(table, pInfo, dbInfo); if (!string.IsNullOrEmpty(desSQL)) { lstSql.Add(desSQL); } } dbInfo.DBStructure.OnCheckEvent(pInfo, dbInfo, CheckEvent.TableChecked, lstSql); } } }
public GrneraterBase(EntityConfig entity) { //_entity = entity; //_tableName = entity.TableName; _table = entity.ToTableInfo(); DesignerInfo = entity.DesignerInfo; _entityBaseTypeName = GetBaseTypeName(entity.BaseTypeName); _entityBaseTypeShortName = GetBaseTypeShortName(entity.BaseTypeName); _baseNamespace = GetBaseTypeNameSpace(entity.BaseTypeName); _entityFileName = entity.FileName; _entityNamespace = entity.Namespace; //_summary = entity.Summary; _className = entity.ClassName; _BQLEntityNamespace = entity.Namespace + ".BQLEntity"; _businessNamespace = entity.Namespace + ".Business"; _dataAccessNamespace = entity.Namespace + ".DataAccess"; _DBName = entity.CurrentDBConfigInfo.DbName; _dbConfig = entity.CurrentDBConfigInfo; _dicGenericInfo = entity.GenericInfo; _lstGenericArgs = entity.GenericArgs; }
/// <summary> /// 检查数据库 /// </summary> /// <param name="db">数据库</param> /// <returns></returns> public static List <string> CheckDataBase(DBInfo db) { List <BQLEntityTableHandle> tables = db.GetAllTables(); List <KeyWordTableParamItem> lstTable = new List <KeyWordTableParamItem>(); foreach (BQLEntityTableHandle entity in tables) { EntityInfoHandle entityInfo = entity.GetEntityInfo(); string tableName = entityInfo.TableName; if (string.IsNullOrEmpty(tableName)) { continue; } KeyWordTableParamItem tableInfo = new KeyWordTableParamItem(tableName, null); FillParamInfos(tableInfo, entityInfo); FillRelation(tableInfo, entityInfo); lstTable.Add(tableInfo); } List <string> sqls = TableChecker.CheckTable(db, lstTable); return(sqls); }
/// <summary> /// 获取创建注释的SQL /// </summary> /// <param name="table">表</param> /// <param name="paramName">字段(如果为空则给表设置注释)</param> /// <param name="description">注释</param> /// <returns></returns> public string GetAddDescriptionSQL(KeyWordTableParamItem table, EntityParam pInfo, DBInfo info) { return(""); }