Shaolinq.Persistence.Linq.Expressions.SqlCreateTableExpression.UpdateConstraints C# (CSharp) Method

UpdateConstraints() public method

public UpdateConstraints ( IReadOnlyList constraints ) : SqlCreateTableExpression
constraints IReadOnlyList
return SqlCreateTableExpression
		public SqlCreateTableExpression UpdateConstraints(IReadOnlyList<Expression> constraints)
		{
			return new SqlCreateTableExpression(this.Table, this.IfNotExist, this.ColumnDefinitionExpressions, constraints, this.TableOptions);
		}

Usage Example

        protected override Expression VisitCreateTable(SqlCreateTableExpression createTableExpression)
        {
            var autoIncrementColumn = createTableExpression.ColumnDefinitionExpressions.SingleOrDefault(c => c.ConstraintExpressions.OfType<SqlSimpleConstraintExpression>().Any(d => d.Constraint == SqlSimpleConstraint.AutoIncrement));

            if (autoIncrementColumn != null)
            {
                var primaryKeyConstraint = createTableExpression.TableConstraints.OfType<SqlSimpleConstraintExpression>().SingleOrDefault(c => c.Constraint == SqlSimpleConstraint.PrimaryKey);

                if (primaryKeyConstraint != null)
                {
                    if (!primaryKeyConstraint.ColumnNames.Contains(autoIncrementColumn.ColumnName))
                    {
                        var newPrimaryKeyConstraint = new SqlSimpleConstraintExpression(SqlSimpleConstraint.PrimaryKey, new [] { autoIncrementColumn.ColumnName });
                        var newUniqueConstraint = new SqlSimpleConstraintExpression(SqlSimpleConstraint.Unique, primaryKeyConstraint.ColumnNames.Concat(autoIncrementColumn.ColumnName).ToArray());

                        return createTableExpression.UpdateConstraints(new ReadOnlyList<Expression>(createTableExpression.TableConstraints.Where(c => c != primaryKeyConstraint).Concat(newPrimaryKeyConstraint).Concat(newUniqueConstraint)));
                    }
                }
                else
                {
                    var newPrimaryKeyConstraint = new SqlSimpleConstraintExpression(SqlSimpleConstraint.PrimaryKey, new [] { autoIncrementColumn.ColumnName });

                    return createTableExpression.UpdateConstraints(new ReadOnlyList<Expression>(newPrimaryKeyConstraint));
                }
            }

            return base.VisitCreateTable(createTableExpression);
        }