Exemple #1
0
        public override void AppendTo(StringBuilder sb, ISqlDialect dialect)
        {
            if (!string.IsNullOrEmpty(ConstraintName))
            {
                sb.Append("CONSTRAINT ").Append(ConstraintName).Append(" ");
            }
            sb.Append("FOREIGN KEY ( ");
            if (Columns != null)
            {
                bool first = true;
                foreach (var col in Columns)
                {
                    if (!first)
                    {
                        sb.Append(", ");
                    }
                    else
                    {
                        first = false;
                    }
                    sb.Append(col.Name);
                }
            }
            else if (ColumnNames != null)
            {
                bool first = true;
                foreach (var col in ColumnNames)
                {
                    if (!first)
                    {
                        sb.Append(", ");
                    }
                    else
                    {
                        first = false;
                    }
                    sb.Append(col);
                }
            }
            else
            {
                throw new InvalidOperationException("either Columns or ColumnNames must be set");
            }
            sb.Append(")");

            if (ForeignKeyClause != null)
            {
                sb.Append(ForeignKeyClause + " ");
            }
            else
            {
                sb.Append("REFERENCES " + References + " ");
                if (ReferenceColumnNames != null && ReferenceColumnNames.Count() > 0)
                {
                    sb.Append("( ");
                    var first = true;
                    foreach (var col in ReferenceColumnNames)
                    {
                        if (!first)
                        {
                            sb.Append(", ");
                        }
                        else
                        {
                            first = false;
                        }
                        sb.Append(col);
                    }
                    sb.Append(") ");
                }
            }

            var onUpdate = dialect.ConvertToString(OnUpdate);

            if (onUpdate != null)
            {
                sb.Append("ON UPDATE " + onUpdate);
            }

            var onDelete = dialect.ConvertToString(OnDelete);

            if (onDelete != null)
            {
                sb.Append("ON DELETE " + onUpdate);
            }

            var deferable = dialect.ConvertToString(Deferrable);

            if (deferable != null)
            {
                sb.Append(deferable);
            }
        }