在Fluent Migrator中定义唯一约束

时间:2012-04-04 19:26:33

标签: fluent-migrator

我正在尝试使用Fluent Migrator创建一个唯一的列。但是,如果我尝试将唯一约束与列定义一起定义,则不起作用,例如:

[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");
    }
}

我执行这样的迁移:

<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

输出:

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

显然没有创建唯一索引。但是,如果我在独立调用中创建索引:

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

输出:

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

我在github上发现了有关此问题的几个问题(例如#49#83)但是他们已经参考this pull关闭了。

我想知道我是否使用了错误的版本。我正在使用NuGet提供的1.0.1.0版本。

我很欣赏这里我做错了什么。提前谢谢!

此致 安德烈

1 个答案:

答案 0 :(得分:2)

FluentMigrator 1.0.2.0解决了这个特殊问题,请更新您的软件包。

FluentMigrator 1.0.1.0于2011年9月发布,截至昨天我们已经回归正轨。

请记住,如果您有一个.NET 4迁移程序集来获取fluentmigrator.tools包,那么您拥有正确版本的Migrate.exe版本。