/// <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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        /// <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 + "'");
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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("");
        }
Exemple #8
0
        /// <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;
        }
Exemple #9
0
 /// <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);
     }
 }
Exemple #10
0
 /// <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);
     }
 }
Exemple #11
0
        /// <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();
        }
Exemple #12
0
        /// <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;
        }
Exemple #13
0
        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;
        }
Exemple #14
0
        /// <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);
            }
        }
Exemple #15
0
        /// <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);
        }
Exemple #16
0
        /// <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);
                }
            }
        }
Exemple #17
0
        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;
        }
Exemple #18
0
        /// <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);
        }
Exemple #19
0
 /// <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("");
 }