protected override Expression VisitConstraint(SqlConstraintExpression constraintExpression)
        {
            string primaryKeyName;

            if (constraintExpression.ReferencesExpression == null || constraintExpression.ColumnNames == null)
            {
                return(base.VisitConstraint(constraintExpression));
            }

            if (this.primaryKeyNameByTablesWithReducedPrimaryKeyName.TryGetValue(constraintExpression.ReferencesExpression.ReferencedTable.Name, out primaryKeyName))
            {
                var index = constraintExpression.ReferencesExpression.ReferencedColumnNames.IndexOf(primaryKeyName);

                var newColumnNames           = constraintExpression.ColumnNames.Where((c, i) => i == index);
                var newReferencedColumnNames = constraintExpression.ReferencesExpression.ReferencedColumnNames.Where((c, i) => i == index);

                return(constraintExpression
                       .ChangeColumnNames(newColumnNames.ToReadOnlyCollection())
                       .ChangeReferences(constraintExpression.ReferencesExpression.ChangeReferencedColumnNames(newReferencedColumnNames)));
            }

            return(base.VisitConstraint(constraintExpression));
        }