public string GetUniqueColumnName(bool isParent, string tableNameHumanCase, ForeignKey foreignKey, bool checkForFkNameClashes, bool makeSingular, Relationship relationship) { // User specified name if (isParent && !string.IsNullOrEmpty(foreignKey.ParentName)) { return(foreignKey.ParentName); } // User specified name if (!isParent && !string.IsNullOrEmpty(foreignKey.ChildName)) { return(foreignKey.ChildName); } // Generate name var addReverseNavigationUniquePropName = checkForFkNameClashes && (DbName == foreignKey.FkTableName || (DbName == foreignKey.PkTableName && foreignKey.IncludeReverseNavigation)); if (ReverseNavigationUniquePropName.Count == 0) { ReverseNavigationUniquePropName.Add(NameHumanCase); ReverseNavigationUniquePropName.AddRange(Columns.Select(c => c.NameHumanCase)); } if (!makeSingular) { tableNameHumanCase = Inflector.MakePlural(tableNameHumanCase); } if (checkForFkNameClashes && ReverseNavigationUniquePropName.Contains(tableNameHumanCase) && !ReverseNavigationUniquePropNameClashes.Contains(tableNameHumanCase)) { ReverseNavigationUniquePropNameClashes.Add(tableNameHumanCase); // Name clash } // Attempt 1 var fkName = (Settings.UsePascalCase ? Inflector.ToTitleCase(foreignKey.FkColumn) : foreignKey.FkColumn).Replace(" ", string.Empty).Replace("$", string.Empty); var name = Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 1); string col; if (!ReverseNavigationUniquePropNameClashes.Contains(name) && !ReverseNavigationUniquePropName.Contains(name)) { if (addReverseNavigationUniquePropName || !checkForFkNameClashes) { ReverseNavigationUniquePropName.Add(name); } return(name); } if (DbName == foreignKey.FkTableName) { // Attempt 2 if (fkName.ToLowerInvariant().EndsWith("id")) { col = Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 2); if (checkForFkNameClashes && ReverseNavigationUniquePropName.Contains(col) && !ReverseNavigationUniquePropNameClashes.Contains(col)) { ReverseNavigationUniquePropNameClashes.Add(col); // Name clash } if (!ReverseNavigationUniquePropNameClashes.Contains(col) && !ReverseNavigationUniquePropName.Contains(col)) { if (addReverseNavigationUniquePropName || !checkForFkNameClashes) { ReverseNavigationUniquePropName.Add(col); } return(col); } } // Attempt 3 col = Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 3); if (checkForFkNameClashes && ReverseNavigationUniquePropName.Contains(col) && !ReverseNavigationUniquePropNameClashes.Contains(col)) { ReverseNavigationUniquePropNameClashes.Add(col); // Name clash } if (!ReverseNavigationUniquePropNameClashes.Contains(col) && !ReverseNavigationUniquePropName.Contains(col)) { if (addReverseNavigationUniquePropName || !checkForFkNameClashes) { ReverseNavigationUniquePropName.Add(col); } return(col); } } // Attempt 4 col = Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 4); if (checkForFkNameClashes && ReverseNavigationUniquePropName.Contains(col) && !ReverseNavigationUniquePropNameClashes.Contains(col)) { ReverseNavigationUniquePropNameClashes.Add(col); // Name clash } if (!ReverseNavigationUniquePropNameClashes.Contains(col) && !ReverseNavigationUniquePropName.Contains(col)) { if (addReverseNavigationUniquePropName || !checkForFkNameClashes) { ReverseNavigationUniquePropName.Add(col); } return(col); } // Attempt 5 for (int n = 1; n < 99; ++n) { col = Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 5) + n; if (ReverseNavigationUniquePropName.Contains(col)) { continue; } if (addReverseNavigationUniquePropName || !checkForFkNameClashes) { ReverseNavigationUniquePropName.Add(col); } return(col); } // Give up return(Settings.ForeignKeyName(tableNameHumanCase, foreignKey, fkName, relationship, 6)); }
public string GetUniqueForeignKeyName(bool isParent, string tableNameHumanCase, ForeignKey foreignKey, bool checkForFkNameClashes, bool makeSingular, Relationship relationship) { // For unit testing /*if (tableNameHumanCase.StartsWith("Burak") || tableNameHumanCase.StartsWith("Car") || tableNameHumanCase.StartsWith("User")) * { * var s = $"[TestCase(\"00\", \"{foreignKey.FkTableName}\", \"{NameHumanCase}\", \"{string.Join("|", Columns.Select(c => c.NameHumanCase))}\", {isParent}, \"{tableNameHumanCase}\", {checkForFkNameClashes}, {makeSingular}, Relationship.{relationship}, \"{foreignKey.FkTableName}\", \"{foreignKey.PkTableName}\", {foreignKey.IncludeReverseNavigation}, \"{foreignKey.FkColumn}\")]{Environment.NewLine}"; * System.IO.File.AppendAllText("c:/temp/unit.txt", s); * }*/ return(_foreignKeyNamingStrategy.GetUniqueForeignKeyName(isParent, tableNameHumanCase, foreignKey, checkForFkNameClashes, makeSingular, relationship)); }
public string GetUniqueForeignKeyName(bool isParent, string tableNameHumanCase, ForeignKey foreignKey, bool checkForFkNameClashes, bool makeSingular, Relationship relationship) { return(_foreignKeyNamingStrategy.GetUniqueForeignKeyName(isParent, tableNameHumanCase, foreignKey, checkForFkNameClashes, makeSingular, relationship)); }