Search code examples
fluent-migrator

Define unique constraint in Fluent Migrator


I'm trying to create a unique column using Fluent Migrator. However, it doesn't work if I try to define the unique constraint together with the column definition, like e.g.:

[Migration(20120404190455)]
public class Migration1 : Migration
{
    public override void Up()
    {
        Create.Table("Test")
            .WithColumn("Name").AsString(64).Unique();
    }

    public override void Down()
    {
        Delete.Table("Test");
    }
}

I execute the migration like this:

<sourcedir>\packages\FluentMigrator.Tools.1.0.1.0\tools\AnyCPU\40\Migrate.exe -a build\TheMigrationDLL.dll --db sqlserver2008 -conn "DQLEXPRESS;Initial Catalog=DBNAME;Trusted_Connection=True;" --verbose=true

Output:

connection is null!
connection is null!
Using Database sqlserver2008 and Connection String Data Source=.\SQLEXPRESS;Initial Catalog=DBNAME;Trusted_Connection=True;
-- VersionMigration: migrating ===============================================

-- CreateTable VersionInfo
CREATE TABLE [dbo].[VersionInfo] ([Version] BIGINT NOT NULL)
-- -> 0,0170009s

-- VersionMigration: migrated
-- -> 0,0190011s

-- Migration1: migrating =====================================================

-- CreateTable Test
CREATE TABLE [dbo].[Test] ([Name] NVARCHAR(64) NOT NULL)
-- -> 0,0020002s

-- Migration1: migrated
-- -> 0,0030002s

INSERT INTO [dbo].[VersionInfo] ([Version]) VALUES (20120404190455)
-- Committing Transaction

Obviously no unique index is created. However, if I create the index in a stand-alone call:

Create.Index().OnTable("Test")
    .OnColumn("Name").Ascending()
    .WithOptions().Unique();

Output:

....
-- CreateIndex Test (Name)
CREATE UNIQUE INDEX [IX_Test_Name] ON [dbo].[Test] ([Name] ASC)
....

I found several issues on github regarding this (e.g. #49 and #83) but they have been closed with reference to this pull.

I wonder if I'm using the wrong version. I'm using version 1.0.1.0 as available from NuGet.

I'd appreciate hints on what I'm doing wrong here. Thanks in advance!

Regards, Andre


Solution

  • FluentMigrator 1.0.2.0 solves this particular problem, please update your package.

    FluentMigrator 1.0.1.0 was released september 2011, as of yesterday we are back on track with releasing.

    Remember if you have a .NET 4 migration assembly to get the fluentmigrator.tools package as well, so you have the right version of the Migrate.exe version.