public static RelationalForeignKeyBuilder ForRelational <TForeignKeyBuilder>( [NotNull] this IForeignKeyBuilder <TForeignKeyBuilder> foreignKeyBuilder) where TForeignKeyBuilder : IForeignKeyBuilder <TForeignKeyBuilder> { Check.NotNull(foreignKeyBuilder, "foreignKeyBuilder"); return(new RelationalForeignKeyBuilder(foreignKeyBuilder.Metadata)); }
public static SqlServerForeignKeyBuilder ForSqlServer <TForeignKeyBuilder>( [NotNull] this IForeignKeyBuilder <TForeignKeyBuilder> foreignKeyBuilder) where TForeignKeyBuilder : IForeignKeyBuilder <TForeignKeyBuilder> { Check.NotNull(foreignKeyBuilder, "foreignKeyBuilder"); return(new SqlServerForeignKeyBuilder(foreignKeyBuilder.Metadata)); }
public static TBuilder SharedNameExtension <TBuilder>(this IForeignKeyBuilder <TBuilder> builder, string value) where TBuilder : IForeignKeyBuilder <TBuilder> { builder.Annotation("Annotation", value + ".Annotation"); builder.Metadata["Metadata"] = value + ".Metadata"; builder.Model["Model"] = value + ".Model"; return((TBuilder)builder); }
public static TForeignKeyBuilder ForRelational <TForeignKeyBuilder>( [NotNull] this IForeignKeyBuilder <TForeignKeyBuilder> foreignKeyBuilder, [NotNull] Action <RelationalForeignKeyBuilder> relationalForeignKeyBuilder) where TForeignKeyBuilder : IForeignKeyBuilder <TForeignKeyBuilder> { Check.NotNull(foreignKeyBuilder, "foreignKeyBuilder"); Check.NotNull(relationalForeignKeyBuilder, "relationalForeignKeyBuilder"); relationalForeignKeyBuilder(ForRelational(foreignKeyBuilder)); return((TForeignKeyBuilder)foreignKeyBuilder); }
public static TForeignKeyBuilder KeyName <TForeignKeyBuilder>( [NotNull] this IForeignKeyBuilder <TForeignKeyBuilder> builder, [NotNull] string keyName) where TForeignKeyBuilder : IForeignKeyBuilder <TForeignKeyBuilder> { Check.NotNull(builder, "builder"); Check.NotEmpty(keyName, "keyName"); builder.Annotation(Annotations.KeyName, keyName); return((TForeignKeyBuilder)builder); }
public static IForeignKey <TDatabase, TTable> ForeignKey <TDatabase, TTable, TReference>(this IForeignKeyBuilder <TDatabase, TTable> @this, Expression <Func <TTable, object> > keyColumns, Expression <Func <TDatabase, IEnumerable <TReference> > > referenceTable, Expression <Func <TReference, object> > referenceColumns, ForeignKeyAction updateAction = ForeignKeyAction.Cascade, ForeignKeyAction deleteAction = ForeignKeyAction.Cascade, string name = null) { var builder = @this as InternalTableBuilder <TDatabase, TTable>; var tempKeyColumns = ExpressionHelpers.ParseMultiPropertySelector(keyColumns ?? throw ModelBuilderError.ArgumentNull(nameof(keyColumns)).AsException()).MatchColumns(builder.Name, builder.Columns); var tempReferenceTable = ExpressionHelpers.ParseSelector(referenceTable ?? throw ModelBuilderError.ArgumentNull(nameof(referenceTable)).AsException()); var tempReferenceColumns = ExpressionHelpers.ParseMultiPropertySelector(referenceColumns ?? throw ModelBuilderError.ArgumentNull(nameof(referenceColumns)).AsException()); if (tempKeyColumns.Length != tempReferenceColumns.Length) { throw ModelBuilderError.ForeignKeyColumnCountsDontMatch().AsException(); } builder.ForeignKeys.Add(new ForeignKeyModel(name: name, keyColumns: tempKeyColumns.ToImmutableArray(), referenceTable: tempReferenceTable, referenceColumns: tempReferenceColumns.ToImmutableArray(), updateAction: updateAction, deleteAction: deleteAction)); return(builder); }