public static List <Column> GetColumnsByTableId( DataTable syscolumns, DataTable systypes, DataTable defaultConstraints, int id, string tableName) { var columns = new List <Column>(); var skipList = TemplateConstants.FieldsToSkip .Split(',') .Select(a => a.Trim().ToLower()) .ToList(); var selectedColumns = syscolumns.Select( "object_id = " + id, "column_id asc") .Where(a => skipList .All(s => tableName.ToLower() + "." + a["name"].ToString().ToLower() != s)) .ToList(); selectedColumns .ToList() .ForEach(a => { var type = GetTypeByUserTypeId( systypes, (int)a["user_type_id"]); var column = new Column { ClrType = TableGenerator.GetClrType(type), GeneratedName = NamingUtil.GetColumnName(tableName, a["name"].ToString()), IsComputed = Convert.ToBoolean(a["is_computed"]), IsIdentity = Convert.ToBoolean(a["is_identity"]), IsNullable = Convert.ToBoolean(a["is_nullable"]), DefaultValue = a["default_object_id"].ToString() != "0" ? defaultConstraints .Select( "object_id = " + a["default_object_id"].ToString()) .Select(dc => dc["definition"].ToString()) .SingleOrDefault() : null, Length = Convert.ToInt32(a["max_length"]), Name = a["name"].ToString(), Precision = Convert.ToInt32(a["precision"]), Scale = Convert.ToInt32(a["scale"]), Type = type }; if (column.DefaultValue != null && DefaultValuesToBeExcluded.ContainsKey(column.DefaultValue.ToLower())) { column.DefaultValue = null; } if (column.DefaultValue != null) { column.DefaultValue = Regex.Replace(column.DefaultValue, @"[\(\)]", ""); column.DefaultValue = Regex.Replace(column.DefaultValue, @"\'", "\""); column.DefaultValue = column.DefaultValue.Trim(); switch (column.ClrType) { case "bool": column.DefaultValue = column.DefaultValue == "1" ? "true" : "false"; break; case "Guid": column.DefaultValue = "Guid.NewGuid()"; break; case "DateTime" when column.DefaultValue.ToLower() == "getutcdate": column.DefaultValue = "DateTime.UtcNow"; break; case "DateTime": column.DefaultValue = "DateTime.Parse(" + column.DefaultValue + ")"; break; // ReSharper disable once RedundantEmptySwitchSection default: break; } } columns.Add(column); }); return(columns); }
private static string GetNavigationPropertyAttributes( Table t, NavigationProperty n) { // need to support the following attributes // ForeignKey (needed if foreign key column name doesn't match nav prop name + "Id") // Index (needed if index that's not primary key exists) // Inverse (needed for multiple relationships between classes) // NotMapped (needed if any nav properties) // needed if source end of foreign key, // and type + "id" isn't a case-insensitive match to // the foreign key source property // (only supporting single property foreign keys with the ForeignKey // attribute for now) column source column var isSource = n.ForeignKey.SourceTableName == t.TableName; var isSingleColumnKey = n.ForeignKey.Columns.Count == 1; var foreignKeyProperties = string.Join(", ", n.ForeignKey.Columns .Select(a => NamingUtil.GetColumnName(t.TableName, a.SourceColumn))); var isInverse = !string.IsNullOrWhiteSpace(n.InverseProperty); var displayNameKey = $"{t.TableName}.{n.Name}"; var displayNeeded = NavPropDisplayNames .ContainsKey(displayNameKey); var display = displayNeeded ? "Display(Name = \"" + NavPropDisplayNames[displayNameKey] + "\")" : ""; var commaNeeded = displayNeeded; var editableNeeded = EditableColumns.ContainsKey($"{t.TableName}.{n.Name}"); var editable = editableNeeded ? (commaNeeded ? ", " : "") + "Editable(true)" : ""; commaNeeded = commaNeeded || editableNeeded; var foreignKeyNeeded = (isSource || isSingleColumnKey) && !isInverse; var foreignKey = foreignKeyNeeded ? (commaNeeded ? ", " : "") + "ForeignKey(\"" + foreignKeyProperties + "\")" : ""; commaNeeded = commaNeeded || foreignKeyNeeded; var inverseNeeded = isInverse; var inverse = inverseNeeded ? (commaNeeded ? ", " : "") + "InverseProperty(\"" + n.InverseProperty + "\")" : ""; var attrNeeded = foreignKeyNeeded || inverseNeeded; var attr = attrNeeded ? "[" + display + editable + foreignKey + inverse + "]" : ""; return(attr); }