Can I use an extension method to add a column AND a foreign key constraint with Fluent Migrator?

StackOverflow https://stackoverflow.com/questions/18477574

  •  26-06-2022
  •  | 
  •  

Question

I have an extension method that is used by several tables:

public static ICreateTableColumnOptionOrWithColumnSyntax WithUser(this ICreateTableWithColumnSyntax tableWithColumnSyntax)
{
    return tableWithColumnSyntax
        .WithColumn("UserId")
            .AsInt32()
            .Nullable();
}

Here is an example table using it:

Create.Table("UserSettings")
    .WithUser()
    .WithColumn("SomeValue")
        .AsString(1)
        .Nullable();

I then have to add a foreign key manually every time like so:

Create.ForeignKey()
    .FromTable("UserSettings")
       .ForeignColumn("UserID")
   .ToTable("Users")
       .PrimaryColumn("Id");

Is there a way to package the foreign key declaration in the extension method WithUser() so that I (and more importantly, other people on my team) don't have to specify it every time?

Was it helpful?

Solution

This ended up being easier than expected. Here is the code to do this:

public static ICreateTableColumnOptionOrWithColumnSyntax WithUser(this ICreateTableWithColumnSyntax tableWithColumnSyntax)
{
    return tableWithColumnSyntax
        .WithColumn("UserId")
            .AsInt32()
            .Nullable()
            .ForeignKey("Users", "Id");
}

I just wish this was better documented somewhere.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top