/// <inheritdoc /> protected override void Wireup <T>(DbTable <T> dbTable) { var model = dbTable.Model; var keyMapping = _keyMappingGetter(dbTable.DbSession, model); var fkConstraint = new DbForeignKeyConstraint(Name, Description, keyMapping.SourceKey, keyMapping.TargetKey, DeleteRule, UpdateRule); model.AddDbTableConstraint(fkConstraint, false); }
private static DbForeignKeyConstraint CreateForeignKeyConstraint <TKey>(string name, string description, TKey foreignKey, Model <TKey> refTableModel, ForeignKeyRule deleteRule, ForeignKeyRule updateRule) where TKey : CandidateKey { Debug.Assert(foreignKey != null); Debug.Assert(refTableModel != null); var model = foreignKey.ParentModel; var foreignKeyConstraint = new DbForeignKeyConstraint(name, description, foreignKey, refTableModel.PrimaryKey, deleteRule, updateRule); Debug.Assert(!(refTableModel != model && string.IsNullOrEmpty(foreignKeyConstraint.ReferencedTableName))); return(foreignKeyConstraint); }
private static void GenerateForeignKeyConstraint(IndentedStringBuilder sqlBuilder, DbForeignKeyConstraint constraint) { Debug.Assert(constraint != null); sqlBuilder.Append("FOREIGN KEY"); constraint.ForeignKey.GenerateColumnList(sqlBuilder); sqlBuilder.IndentLevel++; sqlBuilder.Append("REFERENCES "); sqlBuilder.Append(constraint.ReferencedTableName.ToQuotedIdentifier()); constraint.ReferencedKey.GenerateColumnList(sqlBuilder); constraint.DeleteRule.GenerateForeignKeyRule(sqlBuilder, "DELETE"); sqlBuilder.AppendLine(); constraint.UpdateRule.GenerateForeignKeyRule(sqlBuilder, "UPDATE"); sqlBuilder.IndentLevel--; }