private DataRuleProblem CreateDateRuleProblem(ISqlForeignKeyConstraint foreignKeyConstraint, string ruleProblemDescription) { var problem = new DataRuleProblem(this, ruleProblemDescription, foreignKeyConstraint) { FileName = foreignKeyConstraint.PrimarySource.SourceName, StartLine = foreignKeyConstraint.PrimarySource.StartLine, StartColumn = foreignKeyConstraint.PrimarySource.StartColumn }; return(problem); }
public override IList <DataRuleProblem> Analyze(DataRuleSetting ruleSetting, DataRuleExecutionContext context) { var table = context.ModelElement as ISqlTable; if (table == null || table.Name.Parts[1] == "HiValue") { return(null); } var problems = new List <DataRuleProblem> (); string columnName; foreach (ISqlColumn column in table.Columns) { columnName = column.Name.Parts[2]; if (columnName.EndsWith("Key")) { if (columnName == "CreatedAccountKey" || columnName == "UpdatedAccountKey" || columnName == "RevisedAccountKey" || column.IsPrimaryKey(table)) { continue; } ISqlForeignKeyConstraint foreignKey = table.GetForeignKeyForColumn(column); if (foreignKey == null) { string ruleProblemDescription = string.Format(CultureInfo.CurrentCulture, "Table [{0}].[{1}] does not have a Foreign Key for Column {2}.", table.Name.Parts[0], table.Name.Parts[1], columnName); var problem = new DataRuleProblem(this, ruleProblemDescription, table) { FileName = table.PrimarySource.SourceName, StartLine = table.PrimarySource.StartLine, StartColumn = table.PrimarySource.StartColumn }; problems.Add(problem); } } } return(problems); }
public static bool IsDefinedOnSameColumnsAsPrimaryKey(this ISqlForeignKeyConstraint foreignKeyConstraint) { var primaryKeyConstraint = foreignKeyConstraint.DefiningTable.Constraints.OfType <ISqlPrimaryKeyConstraint>().SingleOrDefault(); if (primaryKeyConstraint != null) { IOrderedEnumerable <string> primaryKeyColumnNamesOrdered = primaryKeyConstraint.ColumnSpecifications.Select(p => p.Column.Name.Parts[2]).OrderBy(p => p); IOrderedEnumerable <string> foreignKeyColumnNamesOrdered = foreignKeyConstraint.Columns.Select(p => p.Name.Parts[2]).OrderBy(p => p); if (primaryKeyColumnNamesOrdered.SequenceEqual(foreignKeyColumnNamesOrdered)) { return(true); } } return(false); }
private DataRuleProblem CreateDateRuleProblem(ISqlForeignKeyConstraint foreignKeyConstraint, string ruleProblemDescription) { var problem = new DataRuleProblem(this, ruleProblemDescription, foreignKeyConstraint) { FileName = foreignKeyConstraint.PrimarySource.SourceName, StartLine = foreignKeyConstraint.PrimarySource.StartLine, StartColumn = foreignKeyConstraint.PrimarySource.StartColumn }; return problem; }