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);
        }
示例#2
0
        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;
        }