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); }
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; } } }
/// <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; } } }