Example #1
0
        public TableInfoModel(ITableInformations info, string database, IStructureAccess db)
        {
            CreateSelectFactory = true;
            Info        = info;
            Database    = database;
            ColumnInfos = db.GetColumnsOf(Info.TableName, database)
                          .Select(s => new ColumnInfoModel(s)).ToList();

            var primaryKeyName = db.GetPrimaryKeyOf(info.TableName, Database);

            var columInfoModel = ColumnInfos.FirstOrDefault(s => s.ColumnInfo.ColumnName == primaryKeyName);

            if (columInfoModel != null)
            {
                columInfoModel.PrimaryKey = true;
            }

            var forgeinKeyDeclarations = db.GetForeignKeys(info.TableName, database);

            foreach (var item in ColumnInfos)
            {
                var fod = forgeinKeyDeclarations.FirstOrDefault(s => s.SourceColumn == item.ColumnInfo.ColumnName);
                if (fod != null)
                {
                    item.ForgeinKeyDeclarations = fod;
                }
            }
        }
        private IDataTableColumnInfo GetColumnInfoAtIndex(int index)
        {
            var columnInfo = ColumnInfos.FirstOrDefault(c => c.Index == index);

            if (columnInfo == null)
            {
                columnInfo = new DataTableColumnInfo(index);
                ColumnInfos.Add(columnInfo);
            }
            return(columnInfo);
        }
Example #3
0
        public DefaultQueryBuilder()
        {
            var targetType      = typeof(T);
            var entityAttribute = targetType.GetCustomAttribute <EntityAttribute>();

            TableName = entityAttribute.Name ?? targetType.Name;
            QueryBuilderException.Check(entityAttribute != null, QueryBuilderError.IsNotEntityClass);

            ColumnInfos = targetType.GetProperties().Select(info => new ColumnInfo(info, info.GetCustomAttribute <ColumnAttribute>())).Where(info => info.ColumnAttribute != null).ToArray();
            var primaryKey = ColumnInfos.FirstOrDefault(info => info.PropertyInfo.IsDefined(typeof(PrimaryKeyAttribute)));

            QueryBuilderException.Check(primaryKey != null, QueryBuilderError.NotExistPrimaryKey);
            PrimaryKeyName = primaryKey.Name;
        }
        public TableInfoModel(ITableInformations info, string database, DbAccessLayer db)
        {
            CreateSelectFactory = true;
            Info        = info;
            Database    = database;
            ColumnInfos = db.Select <ColumnInfo>(new object[] { Info.TableName, database }).Select(s => new ColumInfoModel(s)).ToList();

            var firstOrDefault = db.RunPrimetivSelect(typeof(string),
                                                      "SELECT COLUMN_NAME " +
                                                      "FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc " +
                                                      "JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu " +
                                                      "ON tc.CONSTRAINT_NAME = ccu.Constraint_name " +
                                                      "WHERE tc.CONSTRAINT_TYPE = 'Primary Key' " +
                                                      "AND tc.TABLE_CATALOG = @database " +
                                                      "AND tc.TABLE_NAME = @tableName", new List <IQueryParameter>()
            {
                new QueryParameter("tableName", info.TableName),
                new QueryParameter("database", Database)
            }).FirstOrDefault() as string;

            var columInfoModel = ColumnInfos.FirstOrDefault(s => s.ColumnInfo.ColumnName == firstOrDefault);

            if (columInfoModel != null)
            {
                columInfoModel.PrimaryKey = true;
            }


            var forgeinKeyDeclarations = db.Select <ForgeinKeyInfoModel>(new object[] { info.TableName, database });

            foreach (var item in ColumnInfos)
            {
                var fod = forgeinKeyDeclarations.FirstOrDefault(s => s.SourceColumn == item.ColumnInfo.ColumnName);
                if (fod != null)
                {
                    item.ForgeinKeyDeclarations = fod;
                }
            }
        }
Example #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="tablenameMapper"></param>
        public TableInfo(Type type)
        {
            ClassType = type;

            //NOTE: This as dynamic trick should be able to handle both our own Table-attribute as well as the one in EntityFramework
            var tableAttr = type
                            .GetCustomAttributes(false).SingleOrDefault(attr => attr.GetType().Name == "TableAttribute") as dynamic;

            if (tableAttr != null)
            {
                TableName = tableAttr.Name;
                if ((!(tableAttr is TableAttribute)) && tableAttr.Schema != null)
                {
                    SchemaName = tableAttr.Schema;
                }
            }
            else
            {
                TableName = type.Name;
                if (type.IsInterface() && TableName.StartsWith("I"))
                {
                    TableName = TableName.Substring(1);
                }
            }


            ColumnInfos = type.GetProperties()
                          .Where(t => t.GetCustomAttributes(typeof(IgnoreAttribute), false).Count() == 0)
                          .Select(t =>
            {
                var columnAtt = t.GetCustomAttributes(false).SingleOrDefault(attr => attr.GetType().Name == "ColumnAttribute") as dynamic;

                var ci = new ColumnInfo
                {
                    Property     = t,
                    ColumnName   = columnAtt?.Name ?? t.Name,
                    PropertyName = t.Name,
                    IsKey        = t.GetCustomAttributes(true).Any(a => a is KeyAttribute),
                    IsIdentity   = t.GetCustomAttributes(true).Any(a => a is DatabaseGeneratedAttribute &&
                                                                   (a as DatabaseGeneratedAttribute).DatabaseGeneratedOption == DatabaseGeneratedOption.Identity),
                    IsGenerated = t.GetCustomAttributes(true).Any(a => a is DatabaseGeneratedAttribute &&
                                                                  (a as DatabaseGeneratedAttribute).DatabaseGeneratedOption != DatabaseGeneratedOption.None),
                    ExcludeOnSelect = t.GetCustomAttributes(true).Any(a => a is IgnoreSelectAttribute)
                };

                ci.ExcludeOnInsert = ci.IsGenerated ||
                                     t.GetCustomAttributes(true).Any(a => a is IgnoreInsertAttribute) ||
                                     t.GetCustomAttributes(true).Any(a => a is ReadOnlyAttribute);

                ci.ExcludeOnUpdate = ci.IsGenerated ||
                                     t.GetCustomAttributes(true).Any(a => a is IgnoreUpdateAttribute) ||
                                     t.GetCustomAttributes(true).Any(a => a is ReadOnlyAttribute);

                return(ci);
            })
                          .ToArray();

            if (!ColumnInfos.Any(k => k.IsKey))
            {
                var idProp = ColumnInfos.FirstOrDefault(p => string.Equals(p.PropertyName, "id", StringComparison.CurrentCultureIgnoreCase));

                if (idProp != null)
                {
                    idProp.IsKey = idProp.IsGenerated = idProp.IsIdentity = idProp.ExcludeOnInsert = idProp.ExcludeOnUpdate = true;
                }
            }
        }