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);
        }
Beispiel #6
0
        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);
        }